C 使用带有未签名字符的SHA512 OpenSSL获取警告

C 使用带有未签名字符的SHA512 OpenSSL获取警告,c,openssl,C,Openssl,我正在玩C中的openssl,得到一些我喜欢消除的警告,我不确定如何处理它,因为我发现的示例似乎与我正在模拟的一样 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/sha.h> int main(int argc, char** argv) { int i; unsigned char resSHA512[SHA512_DIG

我正在玩C中的openssl,得到一些我喜欢消除的警告,我不确定如何处理它,因为我发现的示例似乎与我正在模拟的一样

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argc, char** argv)
{
    int i;
    unsigned char resSHA512[SHA512_DIGEST_LENGTH];
    unsigned char unhashed[1024];

    printf("Input string to hash: ");
    fgets(unhashed, sizeof(unhashed), stdin);
    unhashed[strcspn(unhashed, "\n")] = 0;

    SHA512(unhashed, strlen(unhashed), resSHA512);
    printf("\nSHA512: ");
    for ( i = 0; i < SHA512_DIGEST_LENGTH; i++ )
    {
        printf("%02x", resSHA512[i]);
    }
    printf("\n");
    return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,字符**argv)
{
int i;
无符号字符resSHA512[SHA512_摘要_长度];
未签名字符未删除[1024];
printf(“哈希的输入字符串:”);
fgets(未加工、尺寸(未加工)、标准尺寸);
unhashed[strcspn(unhashed,“\n”)]=0;
SHA512(未清除)、strlen(未清除)、resSHA512;
printf(“\nSHA512:”);
对于(i=0;i
我还收到一个警报,当我在Mac上使用openssl编译时,open已经不推荐使用
SHA512
,我是通过它的git存储库获得的。在Linux中,我不会收到任何警告,除非我将
-Wall
标志与
gcc
一起使用

非常感谢您的帮助,因为我正在努力学习新知识


谢谢你

你在
中读到的unhashed
是一个字符串,所以你应该将它声明为
字符的数组。这将使用与字符串相关的函数处理警告

调用
SHA512
时会出现一个警告,它的第一个参数应该是
无符号字符。在这种情况下,您可以安全地将参数强制转换为
无符号字符*


您在Mac上看到的警告是因为整个OpenSSL库在该操作系统上被标记为已弃用,取而代之的是它自己的加密库。

您在
中读取的未清除的
是一个字符串,因此您应该将其声明为
字符的数组。这将使用与字符串相关的函数处理警告

调用
SHA512
时会出现一个警告,它的第一个参数应该是
无符号字符。在这种情况下,您可以安全地将参数强制转换为
无符号字符*

您在Mac上看到的警告是因为整个OpenSSL库在该操作系统上被标记为不推荐使用,而支持它自己的加密库