【问题标题】:How to convert SHA1 to array[5] of unsigned long ints?如何将 SHA1 转换为无符号长整数的数组 [5]?
【发布时间】:2015-04-05 03:11:02
【问题描述】:

出于我使用的库/子系统的目的,我必须将 SHA1(使用例如 opensll 计算)转换为 5 元素无符号长整数数组(32 位变量)或创建上述 SHA1-5-long-array我自己。

原因:

SHA1 (160 bits) = 5 x unsigned long int (32 bits)

我认为第一个解决方案会更好,所以我的问题是:我应该如何完成这项任务?逐字节/位读取字节/位,然后从中创建无符号长整数并将其放入数组中,还是有其他解决方案?

【问题讨论】:

    标签: c++ arrays converter sha1 unsigned-integer


    【解决方案1】:

    SHA1 产生一个 20 字节的散列值。在 openssl 中它返回一个unsigned char*。我猜你可以使用unsigned char[20]uint32_t[5] 中的union 并使用字符来轻松访问字节:

    union mysha1{
        uint32_t shaint[5];
        unsigned char shachar[20];
    };
    

    添加一堆运算符(例如索引),你就可以开始了。

    如果你想让它保持粗略和简单,你可以在 SHA1 输出和你的 uint32_t[5] 之间做一个 memcpy

    【讨论】:

    • 感谢这对我有用:) 也许其他人会想出与之竞争的解决方案。
    • 另一个解决方案是“reinterpret_cast”,但我很确定它会破坏严格的别名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2017-07-21
    • 1970-01-01
    • 2012-05-10
    • 2014-03-28
    相关资源
    最近更新 更多