手机号用 rsa 加密后存储在数据库中,如何用手机号登录?

2021-01-02 21:47:45 +08:00
 xxbutoo

如题: 有一个需求 就是想把用户的手机号用 rsa 加密 数据库里面存的是加密后的数据如:KW/sZMV+cLiqeLqZ9YAb3OvXVOrxd6MrebdqSPCbAZVmP/00As6zKpQvQ0hJjoT1aJSXfErX2kpEpm89jaf00A==

但是这样的话 如果登录用手机号登录咋整呢 不可能查整个用户表去一个一个解密 在比对吧?

两难的选择,请求大佬给个好点的思路 我想了很久 没想到好的办法

5152 次点击
所在节点    Go 编程语言
43 条回复
xujinkai
2021-01-02 21:53:03 +08:00
再存个 hash 值?
zonyitoo
2021-01-02 21:55:19 +08:00
把手机号再用同样的密钥加密一次再传过来比对不就好了?如果没加盐的话
xxbutoo
2021-01-02 21:56:19 +08:00
@zonyitoo 关键是数据库存的是加密后的哈希值,
用户输入的是明文,哈希值每次都不一样的
这咋写 where 条件啊,用明文去匹配加密后的值 行不通呀
xxbutoo
2021-01-02 21:56:53 +08:00
@xujinkai 主要是哈希值每次结果都不一样
jzmws
2021-01-02 22:08:43 +08:00
看到这个 ,也启发了我 , 我也在代码里面傻傻的把密码加密了 。 存密码时候同时存一个明文的 hash 值
保存
1. 数据库中手机号=rsa (手机号)
2.保存 hash =md5 (手机号)
这个数据库中就有一个加密的手机号和手机号对用的 hash 值

使用时候
用 md5 (手机号) 的 hash 值获取对应记录,然后在解密手机号后对比

如果考虑到 md5 加密不安全,加盐 或者用对称加密


楼主这个是搞金融?

非对称加密的每次结果都是不一样的
jzmws
2021-01-02 22:09:28 +08:00
@xxbutoo 你存的时候算 手机号的 哈希值 ,不是加密后的
wdlth
2021-01-02 22:11:22 +08:00
为什么要用 RSA 这种非对称算法做加密呢?用对称算法不行么?
Aoang
2021-01-02 22:11:49 +08:00
需要使用手机号登录,为啥还折腾加密哈希?伪需求吧

没什么思路好说的,只有明文或类明文才能实现。
否则只要是加盐的哈希,只能查全表来匹配。
xxbutoo
2021-01-02 22:17:58 +08:00
@jzmws 确实,我考虑很久 也决定不用 rsa 加密了,用 aes 就行
主要是登录的时候 需要用明文去匹配数据库存储的值
rsa 的话安全是保障了 但是一旦用 rsa 加密了手机号,登录的时候就蛋疼了,只能用 aes 加密 可以用加密后的数据去匹配数据库中的字段
jzmws
2021-01-02 22:23:15 +08:00
@xxbutoo 用 RSA 和 AES 两个一起做吧 因为 你把手机号加密了 肯定不好搞
inframe
2021-01-02 22:42:21 +08:00
字段用同一个 rsa 公钥加密就好,非得每行每个字段都用不同的公钥那就没办法了。。。
eason1874
2021-01-02 22:45:27 +08:00
想过这个问题,每个手机号前面三位后面两位作为明文提示,中间六位加唯一盐存哈希值,不幸泄露被硬破的话,每个号码有一百万种可能
opengps
2021-01-02 23:03:03 +08:00
加密对比啊,跟 md5 密码单向加密一样用。比较密文即可
dzdh
2021-01-02 23:47:10 +08:00
@wdlth 对称加密 aes 每次加密后的结果也是不同的
dzdh
2021-01-02 23:48:03 +08:00
@opengps md5 不是摘要算法么
zonyitoo
2021-01-02 23:49:10 +08:00
对称加密相同输入,输出肯定相同啊。怎么会不同呢?
msg7086
2021-01-02 23:50:01 +08:00
登录存一份哈希就行了,多大点事…
wolong
2021-01-03 01:33:40 +08:00
用手机号登录,那手机号就是账号,没必要加密啊
opengps
2021-01-03 01:44:53 +08:00
@dzdh 用于文件检验是摘要,用于密码不可逆加密算加密算法
Co1a
2021-01-03 02:29:05 +08:00
没有搞懂 Point,还请指教。
1.用户隐私起见:手机号应该是特定的场景下才会 Query,而不是当作 Username 。且,若使用 RSA 加密,公钥与私钥的分配是怎样的?掌握在用户手里还是自己手里?看见 Tag 里的 Go,莫非是 Blockchain ?
2.业务起见:对手机号进行加密在保证性能的评价下,有且只有给予用户 id 的方法来保证速度,换个思路,有没有可能 Register 时直接使用 GPG 生成密钥,敏感时使用服务器 Gennerate 一个文件(实时更新且设定过期),使用 gpg 签名后,服务端解密并查表确认用户身份?(最近迷上了密码学,有些天马行空的想法,哈哈)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/741099

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX