我正在尝试使用AES加密文件并基于前向保密原则通过计算加密的新密钥(即旧密钥的哈希)。所以我使用openssl实现哈希函数SHA256。 首先,我想用这个简单的代码来测试它的可行性:
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>
int main()
{
unsigned char *key =(unsigned char *)"01234567890123456789012345678901";
SHA256(key, strlen(key), key);
return 0;
}
但是出现分段错误的原因可能是什么?
答案 0 :(得分:1)
您的字符串文字放在只读内存中,当openssl尝试写入时,您的程序会出现分段错误。
语言方面,尝试修改字符串文字会导致未定义的行为。
为输入键创建缓冲区或为输出创建新缓冲区。
答案 1 :(得分:0)
C字符串文字实际上是char const*
(尽管它们是char *
,从技术上讲,出于兼容性原因)。你不应该写信给他们。如果这样做,程序的行为将是未定义的。
无论如何,来自SHA256
的{{1}}是:
#include <openssl/sha.h>
因此,要使用它,您应该执行以下操作:
unsigned char *SHA256(const unsigned char *d, size_t n,unsigned char *md);
然后您可以使用以下方式打印结果:
char const *key = "01234567890123456789012345678901";
unsigned char buf[256/CHAR_BIT]; //or SHA256_DIGEST_LENGTH
SHA256((unsigned char const*)key, strlen(key), buf);
(假设8位字符)。