工作时遇到平台注册机生成的序列号注册时提示序列号不合法。
跟踪发现注册机与库对字符串进行md5加密不对,但32位的linux平台是可以的。
问题的关键是检测注册的md5的头文件中字义了typedef unsigned long int UINT4;
md5检测的结构中用到了UNIT4的变量,
在32位下这是32bit(4字节)长,但到了64位下这是64bit(8字节)长了。
要在这个结构前加上
#ifndef __x86_64__
typedef unsigned long int UINT4;
#else
typedef unsigned int UINT4;
#endif
typedef unsigned long int UINT4;
#else
typedef unsigned int UINT4;
#endif
这样到64位就使用unsigned int,这样长度就是4一样了。
加密出来的才是对的。
同时也可以用md5sum对字符串加密,原来只知道可以查出文件的md5值。
用echo -n 字符串| md5sum就可以得到加密数据了
另外查得日期转换成星期几,得到星期天是0,认为出错了。
其实这是对的,算出来的数据%7,星期天就是0了,再换成7就对了。