mcrypt_decrypt
给了我额外的不可见的字符,这些字符只是在页面上回显不可见。只能通过将其写入文本文件才能看到。意思是,仅仅在页面上显示是可以的,很难被注意到。
下面是通过google搜索得到的代码示例。如果有问题,请指导我正确的用法:
function encrypt ($pure_string, $key) {
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, $pure_string, MCRYPT_MODE_ECB, $iv);
return $encrypted_string;
}
function decrypt ($encrypted_string, $key) {
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv);
return $decrypted_string;
}
但是当我尝试的时候:
$encrypted_string = encrypt("This is the original string.", "ABC123");
echo decrypt($encrypted_string, "ABC123");
. .我得到的是:
This is the original string.�������
这个奇怪的字符�������
是实际上不可见,当你/我只是echo
它。只能通过写入文本文件才能看到。
- 那么我错过了什么呢?
- 有什么完美的方法来实现这个加密/解密?
谢谢。
您可以使用trim($string, "'0'4")
剪切这些字符
这是填充。ECB模式要求输入是密码块大小的倍数,因此添加了额外的字节(最有可能是pkcs# 5填充)。
要删除pkcs# 5填充,可以使用以下代码:
$dec_s = strlen($decrypted);
$padding = ord($decrypted[$dec_s-1]);
$decrypted = substr($decrypted, 0, -$padding);
rtrim()将删除McRypt添加的填充…
函数加密(pure_string美元,美元关键) {
=> $关键
$encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, $pure_string, MCRYPT_MODE_ECB, $iv);
=> $ encryption_key
不等于