首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在加密字符串时始终得到相同的结果?

如何在加密字符串时始终得到相同的结果?
EN

Stack Overflow用户
提问于 2016-12-30 13:40:05
回答 2查看 382关注 0票数 1

我有一个函数来加密字符串:

代码语言:javascript
复制
public function encriptar($string) {
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), 
                            MCRYPT_DEV_URANDOM);
    $encrypted = base64_encode($iv . mcrypt_encrypt(MCRYPT_RIJNDAEL_128,
                                                    hash('sha256', getKey(), true), 
                                                    $string, MCRYPT_MODE_CBC, $iv));    
    return $encrypted;
}

问题是,即使添加相同的字符串,我也总是返回不同的值。

示例:

I简介: StackOverflow

结果: InT3g0AUXXTrmCAxrlht5ZVe8GBmlgGDMotXuVu11hI =

如果我重新运行脚本:

I简介: StackOverflow

结果: ImhWn5vPA / A2NY2wpUwg7VLWAiGBls80Z84fGU303Ws =

如果我重新运行脚本:

I简介: StackOverflow

结果: FqvxSsblSwz5riaDnnq7h20PzZTPdk /K+ dikLHbLHTY =

我怎样才能使它始终保持相同的价值呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-30 13:52:00

您正在使用$iv作为伪随机数生成器创建不同的MCRYPT_DEV_URANDOM,使用相同的$iv,结果将相同。

您可以将其存储在数据库中、类实例中,也可以将其存储为最终散列的前缀/后缀。

尽管您不应该为了安全目的重用$iv .

关于重用密钥(甚至IV )的安全含义的更有洞察力的主题可以在这里找到:https://crypto.stackexchange.com/questions/10505/reusing-keys-with-aes-cbc

票数 0
EN

Stack Overflow用户

发布于 2016-12-30 13:48:58

结果依赖于您不断重新生成的$iv变量。您只需要生成一次,将其保存在数据库中,然后再使用它。

代码语言:javascript
复制
function getIv($database) {
    // fictive database abstraction layer
    $iv = $database->fetchIv();
    if (!$iv) {
        $iv = mcrypt_create_iv(
            mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), 
            MCRYPT_DEV_URANDOM
        );
        $database->saveIv($iv);
    }

    return $iv;
}

// in your class

public function encriptar($string) {
    $encrypted = base64_encode($iv . mcrypt_encrypt(MCRYPT_RIJNDAEL_128,
                                                    hash('sha256', getKey(), true), 
                                                    $string, MCRYPT_MODE_CBC, getIv()));    
    return $encrypted;
}

但是,对于最佳实践,应该将其保存在配置文件中。

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

https://stackoverflow.com/questions/41397233

复制
相关文章

相似问题

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