手机号用 rsa 加密后存储在数据库中,如何用手机号登录?
如题: 有一个需求 就是想把用户的手机号用 rsa 加密 数据库里面存的是加密后的数据如:KW/sZMV+cLiqeLqZ9YAb3OvXVOrxd6MrebdqSPCbAZVmP/00As6zKpQvQ0hJjoT1aJSXfErX2kpEpm89jaf00A==
但是这样的话 如果登录用手机号登录咋整呢 不可能查整个用户表去一个一个解密 在比对吧?
两难的选择,请求大佬给个好点的思路 我想了很久 没想到好的办法
如题: 有一个需求 就是想把用户的手机号用 rsa 加密 数据库里面存的是加密后的数据如:KW/sZMV+cLiqeLqZ9YAb3OvXVOrxd6MrebdqSPCbAZVmP/00As6zKpQvQ0hJjoT1aJSXfErX2kpEpm89jaf00A==
但是这样的话 如果登录用手机号登录咋整呢 不可能查整个用户表去一个一个解密 在比对吧?
两难的选择,请求大佬给个好点的思路 我想了很久 没想到好的办法
使用时候
用 md5 (手机号) 的 hash 值获取对应记录,然后在解密手机号后对比
如果考虑到 md5 加密不安全,加盐 或者用对称加密
主这个是搞金融?
非对称加密的每次结果都是不一样的
没什么思路好说的,只有明文或类明文才能实现。
否则只要是加盐的哈希,只能查全表来匹配。
如果密钥就在服务器里,这和明文保存有什么区别?
如果要保护隐私,想来想去只有两个办法:1.不要用手机号登录; 2.手机号像密码一样存哈希值(比较耗资源)。
哈希不是加密,但如果你把密钥和密文放在同一个地方,则是比哈希更糟糕。
@Co1a 还不是我朝,普通用户都习惯直接用手机号登录你能不搞?李彦宏说的有道理的。
假设还原明文,是不同的公私钥,登录不能传输任何可直接还原出手机号的数据
用手机号本身生成 salt,计算出一个哈希值,hash = sha1( 固定 salt+手机号+sha1(手机号)+md5(手机号)(作为自身 salt ) )
每一条记录对应的 ras 的公钥私钥本身也需要存储对吧
用上面的 hash 值作为私钥的索引,每次登录由前端计算后回传,存在此索引表明此手机号存在,找到对应私钥解开密文得到原始手机号
上面计算的 hash 本身回传时可以再加密一次,登录页临时生成一对 rsa 的公私钥用于回传加密
如果手机号数据不用于短信等需要明文的场景,必须由用户输入手机号的操作才能还原,开发有代码有 rsa 公私钥也不能还原手机号的情况,可以在存储时,用上面 hash 值做 aes 的 key 加密后,再用 rsa 存储,rsa 私钥索引使用 sha1(hash)