我在数据库中有一个名为id_num的列,该列必须具有唯一的true值。
用户必须输入他们的ID Num才能在我的系统中注册。 为了保护ID Num,我使用$ this-> encript-> encode()
来表示它每次输入相同的数据时,编写的数据都会生成不同的代码。
例:
首次注册:
我输入12345,将入伍PVfuF8GDzE4yton9tNabJwG
第二次注册: 我输入相同的号码12345,将编入不同的代码M0wYZsDAdR1u0WlsDAdR1
因此,我调用checkExistIdNum()来检查ID Num是否已存在,以确保id_num列是唯一的。
function checkExistIdNum($enc_id_num=null) {
$this->db->select('COUNT(*) AS count');
$this->db->where("(id_num = '$enc_id_num' AND user_id != '".user_id()."')");
$query = $this->db->get('user_info');
$num = $query->row()->count;
if($num>0) return true;
else return false;
}
两者具有相同的真值,但是如果两个编写的代码不同,我如何比较id_num ='$ enc_id_num'?
答案 0 :(得分:0)
我认为您混淆了加密哈希和双向加密的概念。
如果相同的输入,哈希是单向的,并且它总是具有相同的结果。
MD5或SHA1是单向散列算法,通常用于屏蔽数据库中的密码,其主要原因是单向,如果获得散列,则无法将其恢复为原始状态值。
答案 1 :(得分:0)
使用数据库的内置加密函数,以便数据库对值进行索引,并可以快速匹配您输入的任意值。否则你只是重新发明轮子,你要么必须保留一个单独的索引,你每次都要比较(非常慢),或者单独解密和比较每一行(非常慢)。
内置加密解决了所有这些问题,而不会通过索引泄漏敏感数据。
是的,也许使用哈希是一个好主意,但对于琐碎的帐户字符串,如果有人转储了数据库,这很容易被反向设计。
由于您没有识别您的数据库或PHP版本,因此我无法更具体。