手机号用 rsa 加密后存储在数据库中,如何用手机号登录? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
xxbutoo
V2EX    Go 编程语言

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

  •  
  •   xxbutoo 2021 年 1 月 2 日 5740 次点击
    这是一个创建于 1835 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    43 条回复    2021-01-04 18:30:41 +08:00
    xujinkai
        1
    xujinkai  
       2021 年 1 月 2 日 via Android
    再存个 hash 值?
    zonyitoo
        2
    zonyitoo  
       2021 年 1 月 2 日
    把手机号再用同样的密钥加密一次再传过来比对不就好了?如果没加盐的话
    xxbutoo
        3
    xxbutoo  
    OP
       2021 年 1 月 2 日
    @zonyitoo 关键是数据库存的是加密后的哈希值,
    用户输入的是明文,哈希值每次都不一样的
    这咋写 where 条件啊,用明文去匹配加密后的值 行不通呀
    xxbutoo
        4
    xxbutoo  
    OP
       2021 年 1 月 2 日
    @xujinkai 主要是哈希值每次结果都不一样
    jzmws
        5
    jzmws  
       2021 年 1 月 2 日
    看到这个 ,也启发了我 , 我也在代码里面傻傻的把密码加密了 。 存密码时候同时存一个明文的 hash 值
    保存
    1. 数据库中手机号=rsa (手机号)
    2.保存 hash =md5 (手机号)
    这个数据库中就有一个加密的手机号和手机号对用的 hash 值

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

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


    楼主这个是搞金融?

    非对称加密的每次结果都是不一样的
    jzmws
        6
    jzmws  
       2021 年 1 月 2 日
    @xxbutoo 你存的时候算 手机号的 哈希值 ,不是加密后的
    wdlth
        7
    wdlth  
       2021 年 1 月 2 日   2
    为什么要用 RSA 这种非对称算法做加密呢?用对称算法不行么?
    Aoang
        8
    Aoang  
       2021 年 1 月 2 日 via Android
    需要使用手机号登录,为啥还折腾加密哈希?伪需求吧

    没什么思路好说的,只有明文或类明文才能实现。
    否则只要是加盐的哈希,只能查全表来匹配。
    xxbutoo
        9
    xxbutoo  
    OP
       2021 年 1 月 2 日
    @jzmws 确实,我考虑很久 也决定不用 rsa 加密了,用 aes 就行
    主要是登录的时候 需要用明文去匹配数据库存储的值
    rsa 的话安全是保障了 但是一旦用 rsa 加密了手机号,登录的时候就蛋疼了,只能用 aes 加密 可以用加密后的数据去匹配数据库中的字段
    jzmws
        10
    jzmws  
       2021 年 1 月 2 日
    @xxbutoo 用 RSA 和 AES 两个一起做吧 因为 你把手机号加密了 肯定不好搞
    inframe
        11
    inframe  
       2021 年 1 月 2 日
    字段用同一个 rsa 公钥加密就好,非得每行每个字段都用不同的公钥那就没办法了。。。
    eason1874
        12
    eason1874  
       2021 年 1 月 2 日
    想过这个问题,每个手机号前面三位后面两位作为明文提示,中间六位加唯一盐存哈希值,不幸泄露被硬破的话,每个号码有一百万种可能
    opengps
        13
    opengps  
       2021 年 1 月 2 日
    加密对比啊,跟 md5 密码单向加密一样用。比较密文即可
    dzdh
        14
    dzdh  
       2021 年 1 月 2 日
    @wdlth 对称加密 aes 每次加密后的结果也是不同的
    dzdh
        15
    dzdh  
       2021 年 1 月 2 日
    @opengps md5 不是摘要算法么
    zonyitoo
        16
    zonyitoo  
       2021 年 1 月 2 日
    对称加密相同输入,输出肯定相同啊。怎么会不同呢?
    msg7086
        17
    msg7086  
       2021 年 1 月 2 日 via Android
    登录存一份哈希就行了,多大点事…
    wolong
        18
    wolong  
       2021 年 1 月 3 日
    用手机号登录,那手机号就是账号,没必要加密啊
    opengps
        19
    opengps  
       2021 年 1 月 3 日 via Android
    @dzdh 用于文件检验是摘要,用于密码不可逆加密算加密算法
    Co1a
        20
    Co1a  
       2021 年 1 月 3 日 via iPhone
    没有搞懂 Point,还请指教。
    1.用户隐私起见:手机号应该是特定的场景下才会 Query,而不是当作 Username 。且,若使用 RSA 加密,公钥与私钥的分配是怎样的?掌握在用户手里还是自己手里?看见 Tag 里的 Go,莫非是 Blockchain ?
    2.业务起见:对手机号进行加密在保证性能的评价下,有且只有给予用户 id 的方法来保证速度,换个思路,有没有可能 Register 时直接使用 GPG 生成密钥,敏感时使用服务器 Gennerate 一个文件(实时更新且设定过期),使用 gpg 签名后,服务端解密并查表确认用户身份?(最近迷上了密码学,有些天马行空的想法,哈哈)
    nvkou
        21
    nvkou  
       2021 年 1 月 3 日 via Android
    用户有私钥和没私钥是 2 回事。
    如果用户有私钥,rsa 加密就变成解题。可以配合手机验证码验证身份。
    用户没私钥的话,安全责任又在服务器这里的话为什么不选择对称加密呢?
    kaiki
        22
    kaiki  
       2021 年 1 月 3 日
    需求拆分下,你的需求就是两个了,第一个是手机号用 rsa 加密存入数据库,第二个是手机号登录验证,所以第二个需求你不用非对称加密就行
    loading
        23
    loading  
       2021 年 1 月 3 日 via Android
    还不如用 md5 呢,这样就密码泄露了还不至于把用户的直接也丢了(当然跑一次也很简单)
    xuanbg
        24
    xuanbg  
       2021 年 1 月 3 日
    就是 1 楼的方法,再存一个手机号的 hash 。
    xuanbg
        25
    xuanbg  
       2021 年 1 月 3 日
    手机号明文的 hash,密文再 hash 有个鸟用。
    loading
        26
    loading  
       2021 年 1 月 3 日 via Android
    如果你觉得直接 md5 不够“安全”,建议加 salt 后再 md5,然后这个盐你自己爱怎么保护就怎么保护,效果差不多。
    dorothyREN
        27
    dorothyREN  
       2021 年 1 月 3 日
    手机号 有必要加密???
    SuperMild
        28
    SuperMild  
       2021 年 1 月 3 日
    不管你用什么加密方式,用到的密钥从哪里获取?

    如果密钥就在服务器里,这和明文保存有什么区别?

    如果要保护隐私,想来想去只有两个办法:1.不要用手机号登录; 2.手机号像密码一样存哈希值(比较耗资源)。

    哈希不是加密,但如果你把密钥和密文放在同一个地方,则是比哈希更糟糕。
    3dwelcome
        29
    3dwelcome  
       2021 年 1 月 3 日 via Android
    RSA 有两种算法,一种是加密,一种是签名。你想每次加密后 hash 值不变,用签名就可以。
    加密算法无非是加入随机数,让每次结果不一样。
    viakiba
        30
    viakiba  
       2021 年 1 月 3 日 via iPhone
    变的原因是应该 padding 算法 使用零填充试试
    viakiba
        31
    viakiba  
       2021 年 1 月 3 日 via iPhone
    其实怕 hash 碰撞出来 可以考虑 hmac
    Takuron
        32
    Takuron  
       2021 年 1 月 3 日
    再存一个手机号明文的 hash,然后对比明文的 hash 。

    @Co1a 还不是我朝,普通用户都习惯直接用手机号登录你能不搞?李彦宏说的有道理的。
    mikeguan
        33
    mikeguan  
       2021 年 1 月 3 日 via Android
    现在怎样判断手机号重复注册的问题
    idoggy
        34
    idoggy  
       2021 年 1 月 3 日 via Android
    传到后台的时候解下密存成 hash,这样搞简单也不算不合规,毕竟人眼看见的不是明文。
    wdlth
        35
    wdlth  
       2021 年 1 月 3 日
    @dzdh AES 算法在相同的分组模式、填充模式和参数下结果是一致的,不然怎么解密还原呢?
    Stain5
        36
    Stain5  
       2021 年 1 月 3 日
    @idoggy 可以直接把 hash 后的值给 NSA 吗,10 个数字的话,假设一秒钟能尝试 1000 次,算一个月就能跑出来了
    niubee1
        37
    niubee1  
       2021 年 1 月 3 日
    这个设计简直是............... 这么存和存明文有什么区别?
    dotw2x
        38
    dotw2x  
       2021 年 1 月 3 日 via iPhone
    除非有明确要求要达到某加密级别,否则考虑 RSA 的加密效率和复杂性,用 RSA 来做验签的场景更多一点,手机号或证件号等敏感信息还要涉及登录用哈希加盐更适合。
    vc1
        39
    vc1  
       2021 年 1 月 3 日
    有两个问题:1 密文需不需要还原明文手机号? 2 每个用户是否要用不同的公私钥?

    假设还原明文,是不同的公私钥,登录不能传输任何可直接还原出手机号的数据
    用手机号本身生成 salt,计算出一个哈希值,hash = sha1( 固定 salt+手机号+sha1(手机号)+md5(手机号)(作为自身 salt ) )
    每一条记录对应的 ras 的公钥私钥本身也需要存储对吧
    用上面的 hash 值作为私钥的索引,每次登录由前端计算后回传,存在此索引表明此手机号存在,找到对应私钥解开密文得到原始手机号

    上面计算的 hash 本身回传时可以再加密一次,登录页临时生成一对 rsa 的公私钥用于回传加密
    如果手机号数据不用于短信等需要明文的场景,必须由用户输入手机号的操作才能还原,开发有代码有 rsa 公私钥也不能还原手机号的情况,可以在存储时,用上面 hash 值做 aes 的 key 加密后,再用 rsa 存储,rsa 私钥索引使用 sha1(hash)
    vc1
        40
    vc1  
       2021 年 1 月 3 日
    不太明白这需求的出发点和目的是什么,先搞明白需求,再改设计
    LYaoYao
        41
    LYaoYao  
       2021 年 1 月 4 日
    登陆的时候将手机号先用 rsa 加密对比下是否一致不行吗
    lllllliu
        42
    lllllliu  
       2021 年 1 月 4 日
    我想了想,我要调用第三方短信接口的时候应该怎么办呢
    CantSee
        43
    CantSee  
       2021 年 1 月 4 日
    我存的 base64..
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2929 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 13:50 PVG 21:50 LAX 05:50 JFK 08:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86