#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]
最佳答案
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*
作为第一个论点,您可能必须转换 ibuf
: SHA1(static_cast<unsigned char*>(ibuf), strlen(ibuf), obuf);
顺便说一句,你不需要 strlen()
,您可以将其替换为:
SHA1(ibuf, sizeof(ibuf), obuf);
关于c++ - C 代码转换为 C++ sha1 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17852385/