编辑:在采取adivce后,我重新安排了参数和类型.但是当我现在调用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
Run Code Online (Sandbox Code Playgroud)
我在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);
}
Run Code Online (Sandbox Code Playgroud)
如何将我的字符串(我想要散列)转换为unsigned char*?
当我打印出字符串内容时,我所做的以下代码会导致运行时错误:
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
Run Code Online (Sandbox Code Playgroud)
PS:我一直在研究SHA256的许多实现,他们都将unsigned char*作为要散列的消息.他们为什么这样做?为什么不用char*或字符串呢?
你有错误的参数.Buf是输入(要散列的数据),dig是输出摘要(散列).
此外,哈希是二进制数据.在将二进制数据打印到屏幕之前,您必须将其转换为某些字符串表示形式.通常,人们选择使用十六进制字符串.
| 归档时间: |
|
| 查看次数: |
446 次 |
| 最近记录: |