mirror of
https://github.com/friendica/friendica
synced 2024-12-27 06:00:15 +00:00
37 lines
1.3 KiB
PHP
37 lines
1.3 KiB
PHP
|
<?php
|
||
|
require_once('Crypto.php');
|
||
|
try {
|
||
|
$key = Crypto::CreateNewRandomKey();
|
||
|
// WARNING: Do NOT encode $key with bin2hex() or base64_encode(),
|
||
|
// they may leak the key to the attacker through side channels.
|
||
|
} catch (CryptoTestFailedException $ex) {
|
||
|
die('Cannot safely create a key');
|
||
|
} catch (CannotPerformOperationException $ex) {
|
||
|
die('Cannot safely create a key');
|
||
|
}
|
||
|
|
||
|
$message = "ATTACK AT DAWN";
|
||
|
try {
|
||
|
$ciphertext = Crypto::Encrypt($message, $key);
|
||
|
} catch (CryptoTestFailedException $ex) {
|
||
|
die('Cannot safely perform encryption');
|
||
|
} catch (CannotPerformOperationException $ex) {
|
||
|
die('Cannot safely perform decryption');
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
$decrypted = Crypto::Decrypt($ciphertext, $key);
|
||
|
} catch (InvalidCiphertextException $ex) { // VERY IMPORTANT
|
||
|
// Either:
|
||
|
// 1. The ciphertext was modified by the attacker,
|
||
|
// 2. The key is wrong, or
|
||
|
// 3. $ciphertext is not a valid ciphertext or was corrupted.
|
||
|
// Assume the worst.
|
||
|
die('DANGER! DANGER! The ciphertext has been tampered with!');
|
||
|
} catch (CryptoTestFailedException $ex) {
|
||
|
die('Cannot safely perform encryption');
|
||
|
} catch (CannotPerformOperationException $ex) {
|
||
|
die('Cannot safely perform decryption');
|
||
|
}
|
||
|
?>
|