【发布时间】:2011-10-02 08:22:40
【问题描述】:
编辑:在采取行动之后,我重新安排了参数和类型。但是当我现在调用 digest() 函数时应用程序崩溃了?有什么想法吗?
const std::string message = "to be encrypted";
unsigned char* hashMessage;
SHA256::getInstance()->digest( message, hashMessage ); // crash occurs here, what am I doing wrong?
printf("AFTER: n"); //, hashMessage); // line never reached
我正在使用 C++ 中 SHA256 算法的开源实现。我的问题是了解如何传递我的字符串的 unsigned char* 版本以便对其进行哈希处理?
这是接受我的字符串的 unsigned char* 版本的函数:
void SHA256::digest(const std::string &buf, unsigned char *dig) {
init();
update(reinterpret_cast<const unsigned char *>(buf.c_str()), static_cast<unsigned int>(buf.length()));
final();
digest(dig);
}
如何将我的字符串(我想要散列)转换为无符号字符*?
我编写的以下代码在打印字符串内容时会导致运行时错误:
const std::string hashOutput;
char message[] = "to be encrypted";
printf("BEFORE: %s bb\n", hashOutput.c_str());
SHA256::getInstance()->digest( hashOutput, reinterpret_cast<unsigned char *>(message) );
printf("AFTER: %s\n", hashOutput.c_str()); // CRASH occurs here
PS:我一直在研究 SHA256 的许多实现,它们都将 unsigned char* 作为要散列的消息。他们为什么这样做?为什么不使用 char* 或字符串呢?
【问题讨论】:
-
这段代码没有多大意义。为什么你的
message可变你的hashOutputconst?你在做什么来避免缓冲区溢出?请添加指向您正在使用的库的文档的链接。 -
@Mankarse:我正在使用这里实现的 sha256 算法:tinypasswordmanager.googlecode.com/svn
-
请不要以使已经给出的答案不再回答您的问题的方式编辑您的问题。如果这里有一些建议回答了这个问题,那么请接受该建议。如果您遇到更多的问题无法在几个 cmet 中解决,请提出一个新问题。