在Openssl 0.9.7c 下找不到 SHA512 算法

在CentOS 6.3 64位环境下,使用 Openssl 0.9.7c 版本进行编译时,发现程序运行报错,无法找到SHA512算法。经验证,问题可能在于该版本的Openssl不支持SHA512。而升级到0.9.8e和1.0.1c版本则能正常运行。另外,同样版本的Openssl在部分CentOS 6.3机器上编译失败,原因尚待进一步调查,错误提示涉及32位 displacement 超出范围。

本文示例代码下载(假设 openssl 头文件路径是 /yasi/code/openssl-1.0.1c/include,库文件路径是 /usr/lib64)


Build环境:

CentOS 6.3,64 bit


问题:

下面的代码在上述环境中build,使用Openssl 0,.9.7c的库,build成功,但运行时出错,即找不到SHA512算法。


#include <stdio.h>
#include <string.h>
#include <openssl/evp.h>


int main(int argc, char* argv[])
{
EVP_MD_CTX mdctx;
const EVP_MD *md;
char mess1[] = "Test Message\n";
char mess2[] = "Hello World\n";
unsigned char md_value[EVP_MAX_MD_SIZE];
unsigned int md_len;
int i;


OpenSSL_add_all_digests();  // even called this


if(!argv[1]) {
printf("Usage: mdtest digestname\n");
exit(1);
}


md = EVP_get_digestbyname(argv[1]);  // still failed (md is 0x0 after this line) here when argv[1] is "sha512"


if(!md) {
printf("Unknown message digest %s\n", argv[1]);
exit(1);
}


EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, md, NULL);
EVP_DigestUpdate(&mdctx, mess1, strlen(mess1));
EVP_DigestUpdate(&mdctx, mess2, strlen(mess2));
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
EVP_MD_CTX_cleanup(&mdctx);


printf("Digest is: ");
for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
printf("\n");


return 0;
}

原因:

尝试了使用Openssl 0.9.8e 和 1.0.1c 两个版本,都没有出错。所以,使用Openssl 0.9.7c出错的原因很可能就是:Openssl 0.9.7c不支持SHA512算法。(注意,在0.9.7c下使用MD5是可以的)


注意:

代码中的 EVP_MAX_MD_SIZE 的值是64。


附另外一个问题:

Openssl 0.9.8e不是在所有CentOS 6.3 上都build成功了,有一台机器失败了,错误如下。

Google的结果是,Openssl版本造成,但这讲不通,同样的版本在同样的OS上build,只是不同的机器而已。有待进一步调查。


gcc -I.. -I../..-I../../include -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64-DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int -DMD5_ASM -c  -o md5-x86_64.o md5-x86_64.s

md5-x86_64.s:Assembler messages:

md5-x86_64.s:41:Error: 0xd76aa478 out range of signed 32bit displacement

md5-x86_64.s:50:Error: 0xe8c7b756 out range of signed 32bit displacement

md5-x86_64.s:68:Error: 0xc1bdceee out range of signed 32bit displacement

md5-x86_64.s:77:Error: 0xf57c0faf out range of signed 32bit displacement

......

md5-x86_64.s:598:Error: 0xeb86d391 out range of signed 32bit displacement

make[2]: ***[md5-x86_64.o] Error 1

make[2]: Leavingdirectory `/yasi/code/cn-qd/vendor/openssl-0.9.8e/openssl-0.9.8e/crypto/md5'

make[1]: ***[subdirs] Error 1

make[1]: Leavingdirectory `/yasi/code/cn-qd/vendor/openssl-0.9.8e/openssl-0.9.8e/crypto'

make: ***[build_crypto] Error 1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值