使用Openssl的SHA256会导致分段错误

时间:2017-02-09 15:51:39

标签: c hash segmentation-fault

我正在尝试使用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;
  }

但是出现分段错误的原因可能是什么?

2 个答案:

答案 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位字符)。