这个sha 256功能有什么问题?

时间:2016-04-10 16:33:41

标签: c++ sha crypto++

我开始使用crypto ++ lib,也许我有一些误解。

我没有意识到为什么以下代码会产生错误的sha 256

# include <string>
# include <iostream>
# include "cryptopp/cryptlib.h"
# include <cryptopp/sha.h>
# include <cryptopp/hex.h>

using namespace std;

string sha256_hex(const string & str)
{
  byte digest[CryptoPP::SHA256::DIGESTSIZE];
  CryptoPP::SHA256().CalculateDigest(digest, (byte*) &str[0], str.size());

  string ret;
  CryptoPP::HexEncoder encoder;
  encoder.Attach(new CryptoPP::StringSink(ret));
  encoder.Put(digest, sizeof(digest));
  encoder.MessageEnd();

  return ret;
}

int main(int argc, char *argv[])
{
  auto sha256 = sha256_hex(argv[1]);
  cout << "str     = " << argv[1] << endl
       << "sha 256 = " << sha256_hex(sha256) << endl;

  return 0;
}

以下命令

./test-sha256 hello

产生以下输出

str     = hello
sha 256 = DD9F20FF4F1DD817C567DE6C16915DC0A731A4DF51088F55CEF4CD2F89CF9620

但是根据此在线计算器enter link description here"hello"的正确sha 256将为2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

所以我的问题是我做错了什么?

我还有一个问题:应该如何以及何时释放StringSink对象使用的内存?

提前致谢

2 个答案:

答案 0 :(得分:5)

Aren你在这里计算哈希的哈希值吗?您拨打sha256_hex两次,一次以argv[1]为参数,一次以sha256为参数。

答案 1 :(得分:1)

最有可能的是,我发现问题出在这里:

CryptoPP::SHA256().CalculateDigest(digest, (byte*) &str[0], str.size());

你最好通过str.c_str()。使用调试器查看确切传递的内容 - 它是否转换为hello