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

int main()
{
    unsigned char ibuf[] = "trysha";
    unsigned char obuf[20];

    SHA1(ibuf, strlen(ibuf), obuf);

    int i;
    for (i = 0; i < 20; i++) {
        printf("%02x ", obuf[i]);
    }
    printf("\n");

    return 0;
}

这段代码我有一些错误..

sha.cpp: In function ‘int main()’:
sha.cpp:10:27: error: invalid conversion from ‘unsigned char*’ to ‘const char*’ [-fpermissive]
/usr/include/string.h:399:15: error:   initializing argument 1 of ‘size_t strlen(const char*)’ [-fpermissive]
4

2 回答 2

1

strlen()想要一个const char *,或者至少是一个char*,问题是你给它一个unsigned char*。你应该做这个:

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

int main()
{
    char ibuf[] = "trysha";
    unsigned char obuf[20];

    SHA1(ibuf, strlen(ibuf), obuf);

    int i;
    for (i = 0; i < 20; i++) {
        printf("%02x ", obuf[i]);
    }
    printf("\n");

    return 0;
}

如果 SHA1 需要一个unsigned char*as 第一个参数,您可能必须强制转换ibufSHA1(static_cast<unsigned char*>(ibuf), strlen(ibuf), obuf);

顺便说一句,您不需要strlen(),您可以将其替换为: SHA1(ibuf, sizeof(ibuf), obuf);

于 2013-07-25T08:09:32.827 回答
0

它准确地告诉你哪里出了问题——strlen不接受unsigned char*,而是简单明了const char*。根据 C++98 标准的 3.9.1.1 signed charunsigned charchar是不同的类型,您不能显式转换它们。

你为什么要使用unsigned charC 风格的字符串呢?

于 2013-07-25T08:10:12.097 回答