1、SM3算法使用的大多为unsigned long,在64-windows下占4字节空间,64-linux下占8字节空间
因为这个导致了两个平台下,相同的内容,相同字节序(都是小端),得出的结果不一致
强制使用unsigned int可以得到同样的结果
2、网上摘录
嵌入式使用SM3时,会导致结果不一致,由于ARM处理器没有循环左移,把
#define SHL(x,n) (((x) & 0xFFFFFFFF) << n) -> #define SHL(x,n) (((x) & 0xFFFFFFFF) << n%32)
#define ROTL(x,n) (SHL((x),n) | ((x) >> (32 - n))) -> #define ROTL(x,n) (SHL((x),n) | ((x) >> (32 - n%32)))
可以解决