sha256.dll の問題解消

sha256.dll を開発・配布されている水無瀬さんに教えてもらって,sha256.dll の使用 - BiBoLoG で発生していた問題が解消できた.

出力内容の違い

「文字化を何バイトごとに実施するか」に起因していた.自前の関数では8バイトごとで,GetHashText では32バイトごとだった.このために出力内容が異なった.前エントリの出力の一部を再掲する.上は GetHashText の出力の先頭32バイトで,下は自前の関数の出力の先頭32バイトである.分かりやすいように8バイトごとに空白を挿入した.

61 be 55 a8
a8 55 be 61

ちょっと順序が違うだけで,問題ない.

出力文字数の違い

GetHashText 用の char 配列変数を作る際には,そのサイズを GetHashTextLength の返り値に1を加算したものにすべきだった.問題が発生したのは,私がここで1を加算していなかったためだった.

const int s_hashsize = 1+GetHashTextLength( hAlgorithm );

こうして解決した.

検証過程で作った関数

// char * を一個ずつ10進数表示
void printStr2Dec(const char *str)
{
	for(int i=0; i<strlen(str); i++)
		printf("%02d: %d\n", i, str[i]);
}