#include <algorithm>
#include <stdio.h>
#include <openssl/sha.h>
using namespace std;
int main()
{
unsigned char ibuf[] = "compute sha1";
unsigned char obuf[20];
SHA1(ibuf, strlen(ibuf), obuf);
int i;
for (i = 0; i < 20; i++) {
printf("%02x ", obuf[i]);
}
printf("\n");
}
g++ file.cpp -o file -l libssl
file.cpp: In function ‘int main()’:
file.cpp:29: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]
不知道什么是错的..我正在尝试计算一个sha1
答案 0 :(得分:1)
首先,我想知道它是否在匿名化中迷失了,但在我看来,它似乎缺失了
include <string.h>
并且命令行应该看起来更像:
g++ file.cpp -o file -lssl
您正在使用C ++编译器。 C ++编译器通常对类型非常严格。您已将ibuf
定义为unsigned char
(并在strlen中使用,它被视为unsigned char *
)而strlen
期望const char*
,因此会产生错误。
您有以下选项:
您可以在ibuf
中投射strlen
:
SHA1(ibuf, strlen((const char *)ibuf), obuf);
您可以使用建议的-fpermissive
标记使g++
更宽容,并将错误转换为警告,但我不建议:
g++ -fpermissive file.cpp -o file -lssl
由于代码看起来就像普通C
,您可能不需要C++
编译器。如果是这种情况,只需使用C编译器而不是C++
:
gcc file.cpp -o file -lssl
然后,您需要删除include <algorithm>
和namespace..
。