为什么mcrypt中会出现这些奇怪的字符?
我加密和解密成功,但是当我解密该值时,字符串末尾出现奇怪的字符“���”。 最初的 $_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);
I encrypt and decrypt successfully, but when I decrypt the value, there appears strange characters at the end of the string, "���".
The initial $_POST['value']
do not have any blank space or any strange character.
How can I solve this?
I encrypt with this:
$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);
I decrypt with this:
$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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
它只是根据所使用的块大小填充结果。 如果您使用 rtrim(),您将摆脱它们。
It is just padding the result based on the block size used. If you use rtrim(), you will get rid of them.
这些是 unicode 实体。 在输出上尝试 utf8_decode() 。
还有一个相关的已关闭 PHP Bug
我还在 mcrypt 示例页面上找到了此信息。
These are unicode entities. Try utf8_decode() on the output.
There is also a related closed PHP Bug
I also found this info on the mcrypt example page.
尝试切换到 cfb 而不是 ecb 模式,然后重写函数以使用相同的 IV 进行加密和解密。
一种简单的方法是将 IV 与加密数据一起传递(我假设您在函数末尾有类似“return $encrypted_data”的内容,您可以返回 $iv.$encrypted_data 而不是 $encrypted_data 本身,并且然后使用 substr() 返回 IV)。
为我工作。
Try to switch to cfb instead of ecb mode, then rewrite the functions to use the same IV for both encryption and decryption.
An easy way to do that is passing IV along with the encrypted data (I assume you've got something like "return $encrypted_data" at the end of your function, you may return $iv.$encrypted_data instead of $encrypted_data itself, and then get the IV back with substr() ).
Worked for me.
使用以下函数来解密文本。
Use the following function for decrypted text.
Not
来自VB 来自PHP(加密)和PHP(解密),页面是UTF-8,数据库是UTF-8,连接是UTF-8。Not
是来自所有人。 我加密了两个密码。 第一个有奇怪的字符,最后一个没有。 所有值均来自同一Not
is from VB is from PHP(encrypt) and PHP(decrypt) and the page is UTF-8 and the database is UTF-8 and the connection is UTF-8.Not
is from all. I encrypt two passphrases. The first have strange characters and the last doesn't have. All values are POST from the same<form>
.