【问题标题】:C sha1 implementation not working on UnixC sha1 实现在 Unix 上不起作用
【发布时间】:2012-08-15 15:46:46
【问题描述】:

我在 C 中使用 SHA1 的 this implementation。在 Windows 上运行良好,但在 Unix 上不能输出正确的哈希值(在 Ubuntu 和 Mac OS 10.8 上试过)。此外,在 Ubuntu 上,它会从同一条消息中输出不同的哈希值。

我想我可以使用另一个实现,只是好奇为什么会这样。

编辑

谢谢,你们是对的。改成

typedef unsigned int UINT4;

似乎工作正常。

【问题讨论】:

  • 在启用最大警告的情况下编译它,并查看编译器是否发现任何可疑代码。

标签: c windows unix sha


【解决方案1】:

这些是 64 位 unix 吗?

/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;

在 64 位 Linux 上实际上是 8 个字节(但在 64 位 Windows 上是 4 个字节)

https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models

【讨论】:

    【解决方案2】:

    typedef unsigned long int UINT4;

    也许您的 Unix 实现使用 64 位无符号长整数。

    试试

    #include <stdint.h>
    
    /* ... */
    
    typedef uint32_t UINT4;
    

    并使用 C99 编译器。

    【讨论】:

      【解决方案3】:

      如果任何平台是 64 位且具有 64 位 unsigned long,则此代码可能有问题:

      /* UINT4 defines a four byte word */
      typedef unsigned long int UINT4;
      

      没有仔细阅读代码以查看UINT4 的使用方式是否会中断,如果它实际上是 8 个字节,但听起来很可疑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-22
        • 1970-01-01
        • 1970-01-01
        • 2013-07-19
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        相关资源
        最近更新 更多