PHP-寻找一种用于存储电话号码的双向模糊处理方法
我希望(在mySQL中)存储一个模糊版本的电话号码,该号码用于身份验证(我需要能够恢复原始号码) 我考虑过一种任意的方案,比如存储数字*15或只有我的应用程序知道的常数 有什么更好的方法可以做到这一点 编辑:我想澄清一些事情:PHP-寻找一种用于存储电话号码的双向模糊处理方法,php,obfuscation,Php,Obfuscation,我希望(在mySQL中)存储一个模糊版本的电话号码,该号码用于身份验证(我需要能够恢复原始号码) 我考虑过一种任意的方案,比如存储数字*15或只有我的应用程序知道的常数 有什么更好的方法可以做到这一点 编辑:我想澄清一些事情: 保存的电话号码可用于登录iPhone应用程序,因此我希望用户能够看到他们已连接到该服务的号码,以防以后想使用其他号码登录该应用程序。这意味着我不能散列该值 本质上,我正在寻找一种方法来保护数据,如果有人提起我的数据库,他们没有一堆原始形式的电话号码。所以我想对它们进行模糊
编辑:澄清一下,我不是在验证电话号码。如果实现,它将是电话号码+密码!输入一个可能存在的数字字符串,您是否在?哈哈-如果我误导了一些人,我很抱歉。商店在哪里?在数据库中?使用加密功能,而不是滚动您自己的系统 在MySQL中,它将非常简单:
INSERT INTO users (phone) VALUES (AES_ENCRYPT('yourkey', '867-5309'));
当然,现在您将问题从隐藏电话号码改为“我可以在哪里隐藏这把钥匙?”。显而易见的解决方案:把钥匙藏在服务器前门外面的石头下面。这就把问题变成了“我能把这块石头藏在哪里?”。显而易见的解决办法是:用一个门上有挂锁的钢笼子盖住前院。新问题:如何隐藏挂锁钥匙。。。诸如此类。更好的方法是不这样做。有一个原因是用来存储密码 如果需要恢复原始值,则不应将其用于身份验证,因为攻击者总是很容易找到它
如果您觉得需要通过混淆来隐藏该值,则可能需要更改有关存储数据的基本方式。实际加密如何?在这种情况下,一个好的对称加密算法是微不足道的,因为有效负载的长度被限制在10位以内,所以你可以使用一个同样是10位小数的密钥;使用这样一个键,您只需在每个数字上执行类似XOR或increment/mod 10的操作。当然,这个方案中的薄弱环节是存储密钥的方式 但是,我很好奇,如果是为了身份验证,为什么需要将它们取回:
$phone = '...';
$key = 'secret.for.each.number';
$phone = Cipher::encrypt($phone, $key);
在将其存储到数据库之前。然后,您可以将其拔出并执行以下操作:
$phone = Cipher::decrypt($phone, $key);
这个问题没有意义
把这些电话号码保持原样就行了。您不会从这种混淆中获得任何安全性改进这不是一种很好的安全性方法。有几件事突然向我袭来:
听起来你想对它进行加密,而不是混淆它不会存储数字
*10
只会导致相同的数字在结尾处有一个额外的0
:P@PeeHaa抱歉,我想另一个常量更有意义:Punless您的数据库是不安全的,将它们存储在加密的ads中几乎没有真正的安全性。@mfonda现在我在PHP中使用一个加密函数,它不会一直为相同的输入生成相同的输出。这意味着,当我存储它时,我将无法根据使用相同函数生成的值对用户进行身份验证。你可以根据每个用户的一些信息为他们生成不同的密钥。从“我需要能够获取原始号码”这篇文章中,我的观点是,听起来你正在走一条危险的道路。如果您需要取回该值,那么对于身份验证密钥来说,这不是一个好的选择,因为攻击者总是很容易找到它?混淆数字与只拥有原始电话号码相比,难道不会增加什么吗?如果有人可以窃取数据库,你会遇到更大的问题。我必须在这里根据结果值进行身份验证-此函数每次在同一输入上返回不同的值。它不应该。记住,您的$key