我知道加密类每次加密相同的单词/字符串时都会产生不同的输出,例如,$this->encrypt->encode("word")
运行五次会生成五个不同的加密字符串。
如果每次拨打$this->encrypt->encode("word")
给我一些不同的内容,我如何在数据库查询中引用加密字符串?
以不同的方式询问,有没有我可以加密的东西没有随机值,所以每次加密时我得到相同输入的相同输出?
答案 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
}