比较双向加密与数据库中的数据

时间:2011-03-18 18:49:32

标签: codeigniter encryption comparison

我在数据库中有一个名为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'?

2 个答案:

答案 0 :(得分:0)

我认为您混淆了加密哈希和双向加密的概念。

如果相同的输入,哈希是单向的,并且它总是具有相同的结果

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

答案 1 :(得分:0)

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

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

是的,也许使用哈希是一个好主意,但对于琐碎的帐户字符串,如果有人转储了数据库,这很容易被反向设计。

由于您没有识别您的数据库或PHP版本,因此我无法更具体。