SHA-256的初始哈希值是怎么规定的?
SHA-256的8个初始哈希值是将2,3,5,7,11,13,17,19这8个质数的平方根的小数部分取前32bit二进制位得到的。

具体实现代码如下:
#include <stdio.h>int main(int argc, char *argv[])
{double decimals[8] = {0.414213562373095,0.732050807568877,0.23606797749979,0.645751311064591,0.3166247903554,0.605551275463989,0.123105625617661,0.358898943540674,};unsigned short prime_arrays[8] = { 2, 3, 5, 7, 11, 13, 17, 19 };unsigned short weight_arrays[8][32] = {0};unsigned short i = 0, j = 0;unsigned long result[8] = { 0 };for (j = 0; j < 8; ++j) {for (i = 0; i < 32; ++i) {decimals[j] *= 2;if (decimals[j] > 1) {weight_arrays[j][i] = 1;decimals[j] -= 1;} else {weight_arrays[j][i] = 0;}}printf("质数%2d的小数的前31位二进制:", prime_arrays[j]);for (i = 0; i < 32; ++i) {printf("%d ", weight_arrays[j][i]);}printf("\n");}for (j = 0; j < 8; ++j) {for (i = 0; i < 32; ++i) {result[j] += weight_arrays[j][i] << (31 - i);}printf("质数%2d的小数的前31位:", prime_arrays[j]);printf("%#x\n", result[j]);}return 0;
}
程序运行结果:
即:
h0 = 0x6a09e667
h1 = 0xbb67ae85
h2 = 0x3c6ef372
h3 = 0xa54ff53a
h4 = 0x510e527f
h5 = 0x9b05688c
h6 = 0x1f83d9ab
h7 = 0x5be0cd19
