2016年8月24日水曜日

digest 作成備忘録

OpenSSL の SHA-256 を利用してダイジェスト文字列を作る備忘録です。
英数字を小文字にするのどうやるんだっけ?ってあたりから、激しくドレインしてます。
#include <fstream>
#include <iostream>
#include <iterator>
#include <algorithm> // transform
#include <string>
#include <openssl/rsa.h>
#include <openssl/sha.h>
#include <boost/algorithm/hex.hpp>
#include <boost/algorithm/string/case_conv.hpp>

namespace {
  const char heading[] = "heading";
}


void show_usage() {
  std::cout << "make_digest [string]" << std::endl;
}

std::string digest( const char* str ) {
  unsigned char hash[SHA256_DIGEST_LENGTH];
  SHA256_CTX ctx;
  SHA256_Init(&ctx);
  SHA256_Update(&ctx, str, strlen(str));
  SHA256_Final(hash, &ctx);
  std::string result( (const char*)hash, SHA256_DIGEST_LENGTH );
  return result;

}

int main(int argc, char* argv[]) {

 if( argc != 2 ) {
  show_usage();
  return 1;
 }
 std::string charange( heading );
 charange += std::string( argv[1] );
 std::string hoge = digest( charange.c_str() );
 std::string digest;
 boost::algorithm::hex( hoge, std::back_inserter( digest ) );
 boost::algorithm::to_lower( digest );
 //std::transform( digest.begin(), digest.end(), digest.begin(), ::tolower );
 std::cout << digest << std::endl;

  return 0;
}

0 件のコメント: