MinGW并添加了一个库

时间:2012-03-04 17:27:49

标签: c++ file mingw sha1 getline

我想在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;
} 

2 个答案:

答案 0 :(得分:1)

我可以保证Crypto++Botan。两者都是伟大的加密库,我已经将它们用于Windows和mingw。他们做sha1和其他哈希。

答案 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可以接受相同的未修改文件(几年前我遇到了同样的问题)