V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
bhy5899s
V2EX  ›  问与答

有了解 sha256 函数的吗?有个问题想问一下。

  •  
  •   bhy5899s · 2018-07-25 09:09:26 +08:00 · 1742 次点击
    这是一个创建于 2306 天前的主题,其中的信息可能已经有所发展或是发生改变。
    W[i] = SSigma_1(W[i-2])+W[i-7]+SSigma_0(W[i-15])+W[i-16];

    T1 = H + LSigma_1(E) + Conditional(E, F, G) + K[i] + W[i];

    T2 = LSigma_0(A) + Majority(A, B, C);
    H = G;
    G = F;
    F = E;
    E = D + T1;
    D = C;
    C = B;
    B = A;
    A = T1 + T2;
    上面列的这些式子中的 + 号是什么意思啊。
    13 条回复    2018-07-25 16:25:28 +08:00
    felixlong
        1
    felixlong  
       2018-07-25 09:48:20 +08:00
    把所有的值连起来。A+B => AB
    bhy5899s
        2
    bhy5899s  
    OP
       2018-07-25 10:04:09 +08:00
    @felixlong 但是 ABCDEFGH 这 8 个字每一个字都是 32 位的,这样连起来以后就不止 32 位了啊
    zn
        3
    zn  
       2018-07-25 10:05:24 +08:00 via iPhone
    这个跟语言有关吧,你贴的代码是什么语言? C 还是伪代码?
    FanWall
        4
    FanWall  
       2018-07-25 10:14:45 +08:00 via Android
    就是加法

    第一行生成 64*32bit 的消息列表,下面的代码计算散列
    kaifeii
        5
    kaifeii  
       2018-07-25 10:16:39 +08:00
    是无符号加法的意思,所有的变量在过程中都可以用整数来代表。
    bhy5899s
        6
    bhy5899s  
    OP
       2018-07-25 10:29:51 +08:00
    @FanWall 那 32 位+32 位就变成 33 位了,33 位+33 位又会变成 34 位的。这样每个 32 位字的位数都会越来越长,最后得到哈希值的就不止 256 位了啊,我这点比较困惑,是不是加完还得做点其他运算。
    bhy5899s
        7
    bhy5899s  
    OP
       2018-07-25 10:30:13 +08:00
    @kaifeii 那 32 位+32 位就变成 33 位了,33 位+33 位又会变成 34 位的。这样每个 32 位字的位数都会越来越长,最后得到哈希值的就不止 256 位了啊,我这点比较困惑,是不是加完还得做点其他运算。
    kaifeii
        8
    kaifeii  
       2018-07-25 10:35:22 +08:00
    很简单,舍掉。
    kaifeii
        9
    kaifeii  
       2018-07-25 10:35:59 +08:00
    @bhy5899s 舍去最高位( 33 位)
    kaifeii
        10
    kaifeii  
       2018-07-25 10:39:14 +08:00
    @bhy5899s 说错了好像是补码加法,总之加完还是 32 位。正常计算机加法溢出后 33 位不管,这里也是一样。
    bhy5899s
        11
    bhy5899s  
    OP
       2018-07-25 10:51:15 +08:00
    @kaifeii 懂了,非常感谢!!!
    FanWall
        12
    FanWall  
       2018-07-25 10:59:40 +08:00 via Android
    @bhy5899s

    #6

    long + long = longlong ?

    #11

    不觉得你懂了…

    这里的代码是对每个 512bit 的消息块进行运算,更新初始的 8*32bit 的杂凑值,所有消息块迭代完成后才会得出结果。
    429839446
        13
    429839446  
       2018-07-25 16:25:28 +08:00
    ![photo_2018-07-25_16-23-02.jpg]( https://i.loli.net/2018/07/25/5b5833800b201.jpg)
    ![photo_2018-07-25_16-22-57.jpg]( https://i.loli.net/2018/07/25/5b583380614b5.jpg)
    ![photo_2018-07-25_16-22-49.jpg]( https://i.loli.net/2018/07/25/5b58338061eb3.jpg)

    https://github.com/FanFansfan/qt-SHA512-demo 这个学期的信息安全课作业
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1091 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:21 · PVG 07:21 · LAX 15:21 · JFK 18:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.