ハッシュ計算をクラス化できなかった
自己解決できた.showHash() するときは SHA256_Final() 済みとは限らない,というのが問題だった.showHash() の最初に SHA256_Final() して解決した.
何がいけないのかわからない.SHA256_Final() して hash に入るデータが32個すべて204になる.
#ifdef _DEBUG #pragma comment(lib, "libeay32MDd.lib") #pragma comment(lib, "ssleay32MDd.lib") #else #pragma comment(lib, "libeay32MD.lib") #pragma comment(lib, "ssleay32MD.lib") #endif #include <openssl/sha.h> #include <stdio.h> #include <string.h> class sha256c{ private: unsigned char hash[SHA256_DIGEST_LENGTH]; SHA256_CTX ctx; public: sha256c( void ) { init(); } void init( void ) { SHA256_Init(&ctx); } void update( unsigned char *data, size_t len ) { SHA256_Update( &ctx, data, len ); } unsigned char *getHash() { SHA256_Final( hash, &ctx ); return hash; } void showHash( void ) { for ( size_t i = 0; i < SHA256_DIGEST_LENGTH; i++ ) { printf("%02x", hash[i] ); } printf("\n"); } }; int main ( int argc, char *argv[] ) { // ハッシュを求めたいデータ char *textvector = "The quick brown fox jumps over the lazy dog"; // ハッシュ計算 sha256c h; h.update( (unsigned char *)textvector, strlen(textvector) ); h.showHash(); // 表示 // d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 と出れば良し // http://www.chilkatsoft.com/js-sha256-hash.asp // ハッシュを求めたいデータを逐次送る場合 char *fragment[] = {"The ","quick ","brown ","fox ","jumps ","over ","the ","lazy ","dog"}; size_t numword = sizeof(fragment) / sizeof(fragment[0]); // 分割個数 // ハッシュ計算 h.init(); for ( size_t i = 0; i < numword; i++ ) { h.update( (unsigned char *)fragment[i], strlen(fragment[i]) ); } h.showHash(); return 0; }