我正在研究一個小程序,它必須加密一個基本句子並回顯結果。然後,我希望能夠複製粘貼結果並能夠以與我編碼相同的方式解碼文本。它不需要太安全,所以我選擇使用Mcrypt。Mcrypt不解密
當我嘗試解密時,它會給出奇怪的(ASCII?)字母,我不明白它們來自哪裏。試圖用base64編碼/解碼解決它,但這也沒有幫助。我需要改變以使其正常工作?
<?php
// Define Mcrypt variables
$enc = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_CBC;
$key = 'SanderDitIsNodigVoor16bi';
$iv = mcrypt_create_iv(mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM);
// Check if 'submit' is set
if (isset($_POST['submit'])) {
// Check if 'text' is set
if (!empty($_POST['text'])) {
// Check if 'crypt' is set
if (isset($_POST['crypt'])) {
// Retrieve 'text'
$input = $_POST['text'];
// Check for encrypt/decrypt
switch ($_POST['crypt']) {
case 'encrypt':
$result = encrypt();
break;
case 'decrypt':
$result = decrypt();
break;
}
echo $result;
}
// If 'crypt' is not set
else {
echo 'Please select encrypt or decrypt.';
}
}
// If 'text' is not set
else {
echo 'Please fill in some text.';
}
}
function encrypt() {
global $enc, $key, $input, $mode, $iv;
$encrypted = mcrypt_encrypt($enc, $key, $input, $mode, $iv);
$output = base64_encode($encrypted);
return $output;
}
function decrypt() {
global $enc, $key, $input, $mode, $iv;
$decrypted = base64_decode($input);
$output = mcrypt_decrypt($enc, $key, $decrypted, $mode, $iv);
return $output;
}
?>
要清楚,如果我包括mcrypt_decrypt在加密,以確保它不是我的函數本身搞砸了,它正確地解密它。但是,當我試圖分開這兩個,它不。我很難過。
您可能誤解了加密的目的。如果它不需要安全,那麼爲什麼要開始加密? – happymacarts
最好不要使用mcrypt,它是放棄的,多年未更新並且不支持標準PKCS#7(néePKCS#5)填充,只有非標準的null填充甚至不能用於二進制數據。 mcrypt有很多優秀的[bug](https://sourceforge.net/p/mcrypt/bugs/)可以追溯到2003年。相反,考慮使用[defuse](https://github.com/defuse/php-encryption)或者[RNCryptor](https://github.com/RNCryptor),他們提供了一個完整的解決方案,並且正在維護和正確。 – zaph
這只是一個練習,讓我的頭腦圍繞加密的概念。我已經深入OpenSLL加密,但我運行的是PHP的舊版本,所以這對我不起作用。 – Sander