在Openssl 0.9.7c 下找不到 SHA512 算法
来源:互联网 发布:通达信布林线公式源码 编辑:程序博客网 时间:2024/06/05 20:28
本文示例代码下载(假设 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 thisif(!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
- 在Openssl 0.9.7c 下找不到 SHA512 算法
- SHA512算法加密
- ubuntu下openssl找不到的问题
- ubuntu下找不到openssl/ssl.h
- x64机器openSSL 1.0.1.c 在VS2012下编译
- 再次利用openssl来计算sha1, sha224, sha256, sha384, sha512
- 利用openssl来计算sha1, sha224, sha256, sha384, sha512
- MD5、SHA256、SHA512加密算法,以及可逆算法
- MD5, SHA256, SHA512哈希算法
- 在IIS下启用openssl
- 在vs2010下编译OpenSSL
- 在Windows下编译OpenSSL
- 在Windows下编译OpenSSL
- 在vs2010下编译OpenSSL
- OpenSSL在windows下编译
- C语言实现MD5/SHA1/SHA256/SHA512
- ubuntu下安装ruby后openssl找不到的问题
- linux下解决gcc找不到openssl函数库的问题
- STL经典算法集锦之排列(next_permutation/prev_permutation
- ubuntu12.04 安装chromium
- 关于System.out.println
- Why are destructors not virtual by default?
- 黑马程序员----JAVA----基础小结----
- 在Openssl 0.9.7c 下找不到 SHA512 算法
- Dalvik虚拟机即时编译系统在unicore上的移植
- MATLAB——scatter的简单应用
- SEQ ACK
- TVS管
- CodeBlocks下如何给main函数传递参数
- 安装rar(这个太常用了)
- seandroid策略介绍1
- Why don't we have virtual constructors?