首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这些奇怪的字符会出现在mcrypt中?

问为什么这些奇怪的字符会出现在mcrypt中?
EN

Stack Overflow用户
提问于 2009-06-22 09:11:52
回答 5查看 6.5K关注 0票数 3

我成功地进行了加密和解密,但是当我解密该值时,在字符串的末尾出现了奇怪的字符"���“。初始$_POST['value']没有任何空格或任何奇怪的字符。

我该如何解决这个问题呢?

我用这个加密:

代码语言:javascript
复制
$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);

我用这个来解密:

代码语言:javascript
复制
$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);
EN

回答 5

Stack Overflow用户

发布于 2010-09-28 23:57:20

它只是根据使用的块大小填充结果。如果您使用rtrim(),您将摆脱它们。

票数 6
EN

Stack Overflow用户

发布于 2009-06-22 09:15:40

这些是unicode实体。在输出上尝试使用utf8_decode()。

还有一个related closed PHP Bug

mcrypt生成的二进制输出既不是iso-8859-1,也不是utf-8,因此您应该告诉数据库该数据是二进制数据,而不是文本数据。

我也在mcrypt example page.上找到了这个信息

我可以在VB和PHP中加密/解密,但是当我尝试在VB中加密和在PHP中解密时,仅使用mcrypt函数就得到了错误的值

我发现,至少在VB9中,流加密使用UTF,这是8位流中剩余的丢失字节数的值。

因此,如果你加密1234,它会在php中添加chr(4)四次(丢失的字节数),使用chr,否则大多数浏览器/客户端都无法读取它。我不擅长解释,但是我想出的php代码如下。

票数 3
EN

Stack Overflow用户

发布于 2010-04-12 03:25:14

尝试切换到cfb模式而不是ecb模式,然后重写函数以使用相同的IV进行加密和解密。要做到这一点,一种简单的方法是将IV与加密数据一起传递(我假设您的函数末尾有类似于"return $encrypted_data“的内容,您可以返回$iv.$encrypted_data而不是$encrypted_data本身,然后使用substr()返回IV )。对我很管用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1026203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档