试图编译生成 sha1 哈希的程序

Posted

技术标签:

【中文标题】试图编译生成 sha1 哈希的程序【英文标题】:trying to compile the program which generates sha1 hashes 【发布时间】:2021-12-13 22:09:35 【问题描述】:

我正在尝试编译这个程序https://gist.github.com/jrabbit/1042021 我正在使用这个https://doc.opensuse.org/projects/satsolver/11.2/sha1_8h_source.html sha1.h 文件。但是,如果我尝试编译程序 gcc 会给我以下错误(Windows 上的 gcc)

c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.start up+0xa0): 未定义的对 `WinMain@16' 的引用 collect2.exe:错误:ld 返回 1 个退出状态

gcc 无法识别类型 u_int32_t,所以我在 sha1.c 代码中将它们更改为 unit32_t

那里可能有什么问题?

【问题讨论】:

报错说你没有main函数。 是的 main() 函数被注释为@HolyBlackCat 所说。尝试取消注释它。删除第 251 行的 #if 0 和第 276 行的 #endif。 【参考方案1】:

库没有main 函数。任何 C 程序都必须有一个 main 函数才能编译。

所以要么创建一个main.c 文件并将库包含在其中。 或者sha1.c 的第251 行将#if 0 更改为#if 1,这将打开包含在库中的模板主函数。

请注意,模板 'main` 函数存在一些错误。用类似的东西替换它:

#define BUFSIZE 10

int
main(int argc, char **argv)

    SHA1_CTX ctx;
    unsigned char hash[20], buf[BUFSIZE];
    int i;

    for(i=0;i<BUFSIZE;i++)
    
        buf[i] = i + '0';
        printf("%i", i);
    
    printf("\n");
    SHA1Init(&ctx);
    for(i=0;i<BUFSIZE;i++)
        SHA1Update(&ctx, buf + i, 1);
    SHA1Final(hash, &ctx);

    printf("SHA1=");
    for(i=0;i<20;i++)
        printf("%02x", hash[i]);
    printf("\n");
    return 0;

【讨论】:

以上是关于试图编译生成 sha1 哈希的程序的主要内容,如果未能解决你的问题,请参考以下文章

哈希算法之md5和sha1

如何生成随机 SHA1 哈希以用作 node.js 中的 ID?

是否有可能获得相同的 SHA1 哈希? [复制]

SHA256、SHA1、SHA384 哈希到 JSON Web 令牌

sha1 哈希密码在内存中的安全性

使用golang生成字符串的SHA哈希