我成功地进行了加密和解密,但是当我解密该值时,在字符串的末尾出现了奇怪的字符"���“。初始$_POST['value']没有任何空格或任何奇怪的字符。
我该如何解决这个问题呢?
我用这个加密:
$key = 'my key';
$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$id = mcrypt_generic($td, $_POST['value']);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);我用这个来解密:
$key = 'my key';
$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$id = mdecrypt_generic($td, $_COOKIE['value']);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);发布于 2010-09-28 23:57:20
它只是根据使用的块大小填充结果。如果您使用rtrim(),您将摆脱它们。
发布于 2009-06-22 09:15:40
这些是unicode实体。在输出上尝试使用utf8_decode()。
mcrypt生成的二进制输出既不是iso-8859-1,也不是utf-8,因此您应该告诉数据库该数据是二进制数据,而不是文本数据。
我也在mcrypt example page.上找到了这个信息
我可以在VB和PHP中加密/解密,但是当我尝试在VB中加密和在PHP中解密时,仅使用mcrypt函数就得到了错误的值
我发现,至少在VB9中,流加密使用UTF,这是8位流中剩余的丢失字节数的值。
因此,如果你加密1234,它会在php中添加chr(4)四次(丢失的字节数),使用chr,否则大多数浏览器/客户端都无法读取它。我不擅长解释,但是我想出的php代码如下。
发布于 2010-04-12 03:25:14
尝试切换到cfb模式而不是ecb模式,然后重写函数以使用相同的IV进行加密和解密。要做到这一点,一种简单的方法是将IV与加密数据一起传递(我假设您的函数末尾有类似于"return $encrypted_data“的内容,您可以返回$iv.$encrypted_data而不是$encrypted_data本身,然后使用substr()返回IV )。对我很管用。
https://stackoverflow.com/questions/1026203
复制相似问题