如何将 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
。
出于我使用的 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
。