OpenSSL OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL 的密码算法库包含多种加密算法的实现,可单独应用。
OpenSSL 下载:
安装:
./config --prefix=/data/chenzhenjing/local
make (若编译不过,make clean后重试)
make install
一个利用OpenSSL MD5算法的简单示例程序:功能:根据文本文件的地一个非空字符串进行hash
/* * ===================================================================================== * * Filename: SplitProduct.c * * Description: * * Version: 1.0 * Created: 04/03/2013 04:49:06 PM CST * Revision: none * Compiler: * gcc -std=c99 -I/data/chenzhenjing/local/include/openssl/ -c SplitProduct_md5.c * gcc -std=c99 -o test_md5 SplitProduct_md5.o /data/chenzhenjing/local/lib/libcrypto.a * * Author: Zhenjing Chen (zhenjing), zhenjing.chen@gmail.com * Company: * * ===================================================================================== */#define _GNU_SOURCE#include#include #include #include #include #include "openssl/md5.h"MD5_CTX md5_ctx;static int MD5mod(const char* str, int length, int mod){ char sign[16] = { 0}; MD5_Init(&md5_ctx); MD5_Update(&md5_ctx, str, length); MD5_Final(sign, &md5_ctx); int sum = 0; for (int i=0; i < 16; i ++) { sum += (sign[i]&0xff); } int offset = sum % mod; return offset;}int main(int argc, char** argv){ if( argc < 4){ fprintf(stderr, "%s num infile outfile\n", argv[0]); exit(-1); } int num = atoi(argv[1]) ; if( num <= 0){ fprintf(stderr, "ERROR: num error: %s\n", argv[1]); exit(-1); } FILE* in = fopen(argv[2], "r"); if( in == NULL){ perror("fopen"); fprintf(stderr, "ERROR: infile error: %s\n", argv[2]); exit(-1); } FILE** OUT = (FILE**)malloc(sizeof(FILE*) * num); for(int i=0; i
其他参考资料:
使用 OpenSSL API 进行安全编程: