我想在MinGW中使用this库,我一直在努力让这个例子起作用。
这可能吗?我看过using this,但我还没有成功。
另外,我很欢迎sha1散列字符串的替代建议。
这些是我在尝试编译sha1.cpp或示例程序时遇到的错误:
sha1.h:29:17:错误:成员'lrot'上的额外资格'SHA1 ::'[-fpermissive]
sha1.h:30:15:错误:成员'storeBigEndianUint32'[-fpermissive]
上的额外资格'SHA1 ::'sha1.h:31:15:错误:成员'hexPrinter'[-fpermissive]
上的额外资格'SHA1 ::'
感谢。
第2部分
#include <fstream>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include "sha1.h"
using namespace std;
int main(int argc, char *argv[])
{
const char* BYTES;
ifstream myFile("word.txt");
if (! myFile)
{
cout << "Error openning file" << endl;
return -1;
}
while (! myFile.eof())
{
getline(myFile, BYTES);
cout << BYTES << endl;
SHA1* sha1 = new SHA1();
sha1->addBytes(BYTES, strlen(BYTES));
unsigned char* digest = sha1->getDigest();
sha1->hexPrinter(digest, 20);
delete sha1;
free(digest);
}
myFile.close();
return 0;
}
答案 0 :(得分:1)
答案 1 :(得分:0)
问题在于SHA1.h文件中的以下行中的额外“SHA1 ::”:
static Uint32 SHA1::lrot( Uint32 x, int bits );
static void SHA1::storeBigEndianUint32( unsigned char* byte, Uint32 num );
static void SHA1::hexPrinter( unsigned char* c, int l );
应将其修改为
static Uint32 lrot( Uint32 x, int bits );
static void storeBigEndianUint32( unsigned char* byte, Uint32 num );
static void hexPrinter( unsigned char* c, int l );
这是因为函数是在SHA1类中定义的,不需要再次定义它们在SHA1中。请注意,Visual Studio可以接受相同的未修改文件(几年前我遇到了同样的问题)