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]); }