CI加密和解密

时间:2014-09-16 23:18:05

标签: codeigniter encryption

我知道加密类每次加密相同的单词/字符串时都会产生不同的输出,例如,$this->encrypt->encode("word")运行五次会生成五个不同的加密字符串。

如果每次拨打$this->encrypt->encode("word")给我一些不同的内容,我如何在数据库查询中引用加密字符串?

以不同的方式询问,有没有我可以加密的东西没有随机值,所以每次加密时我得到相同输入的相同输出?

3 个答案:

答案 0 :(得分:2)

Base64编码不是加密(指你自己的答案)。我没有使用过codeigniter,但我注意到doc pages它允许:

$这 - > encrypt-> SET_MODE();

您可以使用ECB模式(MCRYPT_MODE_ECB)对确定性加密进行加密,其中相同的数据始终加密到相同的密文。这样,您可以加密搜索字符串,它将匹配数据库中的加密数据。

这被认为是ECB模式的弱点,但在这种情况下,确定性行为可能是您想要的。

答案 1 :(得分:1)

我认为base64_encode($ str)正是我所寻找的。

答案 2 :(得分:0)

此代码仅适用于php 5.5或更高版本

echo password_hash(variable, PASSWORD_DEFAULT);

第一个参数是需要散列的密码字符串,第二个参数指定应该用于生成散列的算法。

默认算法目前是bcrypt,但是更强的算法可能会在以后的某个时间点添加为默认值,并且可能会生成更大的字符串。如果在项目中使用PASSWORD_DEFAULT,请确保将哈希存储在容量超过60个字符的列中。将列大小设置为255可能是一个不错的选择。您也可以使用PASSWORD_BCRYPT作为第二个参数。在这种情况下,结果将始终为60个字符。

并检查密码哈希这里是语法

<?php
if (password_verify($oldpassword, $hash)) {
  // Success!
 // the first parameter is your password that's not yet encrypted, the secode is your password  encrypted
 }
 else {
  // Invalid password
 }