2011-03-18 51 views
1

我在数据库中有一个名为id_num的列,并且该列必须具有唯一的真实值。将数据库中的数据与双向注册表进行比较

用户必须输入他们的ID号才能在我的系统中注册。 为了保护ID号码,我使用$ this-> encript-> encode()来引用它。

每次输入相同的数据时,编排的数据将生成不同的代码。

示例:
第一个登记: 我进入12345,

第二注册将被encripted到PVfuF8GDzE4yton9tNabJwG: 我输入了相同的编号12345,将encripted于不同码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”,而这两个encripted代码有什么不同?

回答

0

我认为你混淆了密码散列和双向加密的概念。

哈希是单向的,它总是有相同的结果,给定相同的输入。

MD5或SHA1是单向散列算法,通常用于掩盖数据库中的密码,其主要原因是它只是单向散列,如果获得散列,则无法将其恢复为其原始价值。

0

使用数据库的内置加密函数,以便数据库对值进行索引,并且可以快速匹配您输入的任意值。否则,你只是重新发明轮子,而且你必须保留一个单独的索引,每次比较(非常慢),或者单独解密和比较每一行(极慢)。

内置加密解决了所有这些问题,而不会通过索引泄漏敏感数据。

是的,也许这将是一个好主意,使用散列,但对于琐碎的帐户字符串,如果有人倾倒数据库可能很容易被反向工程。

既然你不确定你的数据库或你的PHP版本,我不能更具体。

相关问题