OpenSSL密码算法库: MD5示例小程序

简介:

OpenSSL http://www.openssl.org/ OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL 的密码算法库包含多种加密算法的实现,可单独应用。

OpenSSL 下载:http://www.openssl.org/source/

安装:

./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 <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <ctype.h>
#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<num; ++i){
        char buf[256] = {0};
        sprintf(buf, "%s_%d", argv[3], i);
        OUT[i] = fopen(buf, "w");
        if( OUT[i] == NULL){
            perror("fopen");
            fprintf(stderr, "ERROR: infile error: %s\n", argv[2]);
            exit(-1);
        }
    }

    size_t len = 0;
    ssize_t read;
    char * line = NULL;

    while ((read = getline(&line, &len, in)) != -1) {
        int  klen = 0;
        while( klen < read ){
            if( isspace( *(line+klen)) ) break;

            klen++;
        }

     //   char id[256]={0};
     //   strncpy(id, line, klen);
     //   printf("id=%s\tklen=%d\tread=%ld\tline=%s", id, klen, read, line);

        fprintf(OUT[MD5mod(line, klen, num)], "%s", line);
    }

    if(line) free(line);

    return 0;
}
复制代码

其他参考资料:

使用 OpenSSL API 进行安全编程:http://www.ibm.com/developerworks/cn/linux/l-openssl.html


本文转自 zhenjing 博客园博客,原文链接: http://www.cnblogs.com/zhenjing/p/openssl.html ,如需转载请自行联系原作者
相关文章
|
4月前
|
算法 Java 数据处理
Java中MD5加密算法的实现
Java中MD5加密算法的实现
|
5天前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
10 0
|
28天前
|
存储 算法 安全
超级好用的C++实用库之sha256算法
超级好用的C++实用库之sha256算法
51 1
|
28天前
|
存储 算法 安全
超级好用的C++实用库之国密sm4算法
超级好用的C++实用库之国密sm4算法
39 0
|
28天前
|
算法 安全 Serverless
超级好用的C++实用库之国密sm3算法
超级好用的C++实用库之国密sm3算法
34 0
|
28天前
|
算法 数据安全/隐私保护 C++
超级好用的C++实用库之MD5信息摘要算法
超级好用的C++实用库之MD5信息摘要算法
48 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【人工智能】传统语音识别算法概述,应用场景,项目实践及案例分析,附带代码示例
传统语音识别算法是将语音信号转化为文本形式的技术,它主要基于模式识别理论和数学统计学方法。以下是传统语音识别算法的基本概述
66 2
|
2月前
|
JavaScript 算法 前端开发
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
358 1
|
2月前
|
算法 JavaScript 前端开发
消息摘要算法:MD5加密
消息摘要算法:MD5加密
51 1
|
2月前
|
机器学习/深度学习 运维 算法
深入探索机器学习中的支持向量机(SVM)算法:原理、应用与Python代码示例全面解析
【8月更文挑战第6天】在机器学习领域,支持向量机(SVM)犹如璀璨明珠。它是一种强大的监督学习算法,在分类、回归及异常检测中表现出色。SVM通过在高维空间寻找最大间隔超平面来分隔不同类别的数据,提升模型泛化能力。为处理非线性问题,引入了核函数将数据映射到高维空间。SVM在文本分类、图像识别等多个领域有广泛应用,展现出高度灵活性和适应性。
112 2