首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mcrypt_encrypt乱码文本

mcrypt_encrypt乱码文本
EN

Stack Overflow用户
提问于 2013-01-07 19:07:29
回答 1查看 636关注 0票数 0

首先,请原谅这个问题,这可能是一个简单的问题,但我在理解加密方法时遇到了麻烦。

我使用以下函数来加密/解密:

代码语言:javascript
复制
private function encodemc($value,$skey){ 
    if(!$value){return false;}
    $skey = substr($skey, 2, 4);
    $text = $value;
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $skey, $text, MCRYPT_MODE_ECB, $iv);
    return trim($this->safe_encode($crypttext)); // safe_encode adds another encoding using `base64_encode`
}

private function decodemc($value,$skey){
    if(!$value){return false;}
    $skey = substr($skey, 2, 4);
    $crypttext = $this->safe_decode($value);
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $skey, $crypttext, MCRYPT_MODE_ECB, $iv);
    return trim($decrypttext);
}

$key看起来像这样:570c45546dwq45gjk191

问题是一些文本没有得到正确的解密/加密,并且它在html页面中显示,就好像它使用了错误的文本编码。

奇怪的是,在10个项目中,只有2到3个项目是乱码,这取决于钥匙。此外,有时只有一部分字符串是乱码。

我发现造成乱码的原因是一些随机的字母。例如,当使用上面的键时,字母S破坏了代码,文本变得乱码。

因此,我对键应用了substr($skey, 2, 4);,看看是否有什么变化。原来,如果我改变密钥,破解代码的字符是不同的。

但是,即使使用长度为== 1的密钥,问题仍然存在。

你知道问题出在哪里吗?

编辑:

下面是代码的其余部分。

代码语言:javascript
复制
private function safe_encode($string) {
    $data = base64_encode($string);
    $data = str_replace(array('+','/','='),array('-','_',''),$data);
    return $data;
}

private function safe_decode($string) {
    $data = str_replace(array('-','_'),array('+','/'),$string);
    $mod4 = strlen($data) % 4;
    if ($mod4) {
        $data .= substr('====', $mod4);
    }
    return stripslashes(base64_decode($data));
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-07 19:20:54

这似乎是一个非常奇怪的问题。

我没有给你一个明确的答案,但这里有几个你可以尝试的事情。

  1. Encrypt/Decrypt而不转到数据库。如果问题消失了,那么数据库在处理通过加密函数输出的字符时就会出现问题。
  2. 会在加密之前修剪该值。如果问题消失,则加密后的修剪是错误的。
  3. 删除safe_encodesafe_decode代码。如果问题消失,则这些函数会添加/删除重要的内容。

一次完成以上所有操作很重要,因为可能会有多个问题。如果上述步骤解决了问题,则一次重新引入一个步骤,以确定导致问题的原因。

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

https://stackoverflow.com/questions/14194642

复制
相关文章

相似问题

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