如何将 SHA1 转换为无符号长整型数组 [5]?

How to convert SHA1 to array[5] of unsigned long ints?

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

原因:

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

我认为第一个解决方案会更好,所以这是我的问题:我应该如何解决这个任务?阅读 byte/bit 的 byte/bit,然后从中创建无符号长整数并将其放入数组中,或者是否有不同的解决方案?

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

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

再加上一堆运算符(例如索引)就可以了。

不过,如果您想保持粗略和简单,您可以在 SHA1 输出和 uint32_t[5] 之间做一个 memcpy