V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
reloop
V2EX  ›  PHP

怎么更新密码加密算法? 比如 原策略是 如果密码是 abc 保存时改为 abc123 然后再 MD5 保存到数据库 , 现在被知道了 , 我想改算法 把 abc 改成 a1ab2bc3c 然后再 MD5 保存要怎么做?

  •  
  •   reloop · 2013-09-01 16:42:08 +08:00 · 5998 次点击
    这是一个创建于 4098 天前的主题,其中的信息可能已经有所发展或是发生改变。
    20 条回复    1970-01-01 08:00:00 +08:00
    swulling
        1
    swulling  
       2013-09-01 16:46:54 +08:00   ❤️ 1
    各种语言都有那么多现成的安全的密码策略不用,为啥要自造呢,自造还选md5

    选一个现成的,对密文二次加密就好了。而你这个思路相当于要把md5逆向破解....
    anheiyouxia
        2
    anheiyouxia  
       2013-09-01 16:47:29 +08:00   ❤️ 2
    我只想到一个笨方法,保留原来的加密算法,把用户输入的密码按照新算法换算成md5值进行对比,如果是错误的,那么就再按照原来的算法进行换算对比,如果值正确,那么再把这个旧的MD5用新的替换到数据库。

    因为现在md5暂时是不可逆的,所以要主动操作改变的话.......你这个情况,就我的了解,是没办法的了.....
    takwai
        3
    takwai  
       2013-09-01 16:52:56 +08:00 via Android   ❤️ 1
    目前看来只有二楼方法可行了。

    楼主怎么不用HMACMD5或者HMACSHA1这种呢?
    reloop
        4
    reloop  
    OP
       2013-09-01 16:56:11 +08:00
    @swulling
    @anheiyouxia
    @takwai
    多谢各位!!
    no2x
        5
    no2x  
       2013-09-01 16:57:47 +08:00
    我的建议

    1。将 旧MD5加密的密码 通过 + 789 再 MD5 一次,保存,这样保证数据库里的数据更新了先。

    2。用户新登录或修改密码,则,MD5( MD5( 密码+123)+789 ) 校验后,用 MD5( 密码 + 随机码 ) 和 随机码 一起保存到新数据库。

    3。从此使用 密码 和 随机码 组合 MD5 校验。
    qq286735628
        6
    qq286735628  
       2013-09-01 17:04:04 +08:00
    MD5不是用来加密,而是生成摘要的

    平常数据库中,保存用户密码的MD5值,也只是不想被爆后,用户密码直接暴露在外
    gamexg
        7
    gamexg  
       2013-09-01 19:16:04 +08:00
    新密码保存为 v2$处理后的密码 ,用户登录的时候读版本标记,如果是新的就按新的处理,如果老的就按老的比较,并把密码改成新的版本保存。
    lichao
        8
    lichao  
       2013-09-01 20:00:06 +08:00
    你当初要是用随机盐,就没这个烦恼了
    hahastudio
        9
    hahastudio  
       2013-09-01 20:04:36 +08:00
    psw→psw_stored = md5(psw+123)→hash2(psw_stored + hash1(psw_stored))
    otakustay
        10
    otakustay  
       2013-09-02 02:43:24 +08:00
    我很奇怪的是,对于加盐的md5,就算不是随机的盐,被知道算法有什么关系吗?加盐md5被逆(即便是字典法)有这么简单吗?
    vking
        11
    vking  
       2013-09-02 08:23:12 +08:00 via Android
    再md5一次是最简单有效的办法。
    bigredapple
        12
    bigredapple  
       2013-09-02 08:26:29 +08:00
    区分新老用户,
    老用户用老策略验证,成功更新到新策略
    新用户用新策略验证
    ichou
        13
    ichou  
       2013-09-06 06:13:43 +08:00
    md5不可逆啊 你几乎不可能把所有数据100%取出明文密码了
    只能在密文基础上再加密了

    @otakustay 加盐md5被逆已经很普遍了 现在的字典真的够强大

    加密算法最好加盐后两次散列 这样可以在很大程度上避免被逆
    msputup
        14
    msputup  
       2013-09-06 07:44:28 +08:00
    md5(md5($password))就好了。现在的字典还是破解不了双重的。
    如果这都被猜出密码,无非就是社工,要么就是本地嗅探或者C网嗅探的吧。
    otakustay
        15
    otakustay  
       2013-09-06 14:27:17 +08:00
    @ichou 原来现在的md5字典已经连常用的盐也算在内了啊……话说如果我的加盐是把明文最后3个字符当盐,这种方案还能不能字典?
    jimrok
        16
    jimrok  
       2013-09-06 15:50:34 +08:00
    要加随机盐啊,盐值要随机够大,混合后就不容易破解了。
    xhacker
        17
    xhacker  
       2013-09-06 15:54:42 +08:00
    @msputup: 双重的很常见,大多数彩虹表里都有。
    jjplay
        18
    jjplay  
       2013-09-06 16:07:49 +08:00
    替换字符

    a => c
    b => k
    c => 9
    e => ;

    然后再分割两组 调换位置,再逆变加密下,嘿嘿
    bd572db
        19
    bd572db  
       2013-09-06 21:35:56 +08:00
    直接在现有算法基础上,再套一层强力算法,数据库里加一列,在现有密文基础上,再次加密,放到新列里

    我遇到和你一样的情形,原有的算法,太过简单
    bd572db
        20
    bd572db  
       2013-09-06 21:37:20 +08:00
    这样可以迅速调整,且用户完全不会察觉
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3176 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:17 · PVG 21:17 · LAX 05:17 · JFK 08:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.