【发布时间】:2017-07-27 21:04:00
【问题描述】:
我正在开发一个必须加密基本句子并回显结果的小程序。然后我希望能够复制粘贴结果并能够以与编码相同的方式解码文本。它不需要太安全,所以我选择使用 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 以确保它不是我在函数本身中搞砸的东西,它确实会正确解密它。但是当我试图将两者分开时,它没有。我被难住了。
【问题讨论】:
-
您可能误解了加密的目的。如果它不需要安全,那为什么要加密呢?
-
这只是一个练习,让我了解加密的概念。我已经深入研究了 OpenSLL 加密,但我运行的是旧版本的 PHP,所以这对我不起作用。
-
如此糟糕的代码
标签: php encryption mcrypt