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[] = {}; MD5_Init(&md5_ctx);
MD5_Update(&md5_ctx, str, length);
MD5_Final(sign, &md5_ctx); int sum = ;
for (int i=; i < ; i ++) {
sum += (sign[i]&0xff);
}
int offset = sum % mod;
return offset;
} int main(int argc, char** argv)
{
if( argc < ){
fprintf(stderr, "%s num infile outfile\n", argv[]);
exit(-);
}
int num = atoi(argv[]) ;
if( num <= ){
fprintf(stderr, "ERROR: num error: %s\n", argv[]);
exit(-);
} FILE* in = fopen(argv[], "r");
if( in == NULL){
perror("fopen");
fprintf(stderr, "ERROR: infile error: %s\n", argv[]);
exit(-);
} FILE** OUT = (FILE**)malloc(sizeof(FILE*) * num);
for(int i=; i<num; ++i){
char buf[] = {};
sprintf(buf, "%s_%d", argv[], i);
OUT[i] = fopen(buf, "w");
if( OUT[i] == NULL){
perror("fopen");
fprintf(stderr, "ERROR: infile error: %s\n", argv[]);
exit(-);
}
} size_t len = ;
ssize_t read;
char * line = NULL; while ((read = getline(&line, &len, in)) != -) {
int klen = ;
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 ;
}

其他参考资料:

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

OpenSSL密码算法库: MD5示例小程序的更多相关文章

  1. md5加密小程序

    #-*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import hashlib m = hashlib.md5() m.updat ...

  2. 推荐3个小程序开源组件库——Vant、iView、ColorUI

    推荐3个小程序开源组件库 在进行小程序开发时,经常会遇到编写组件方面的阻碍,这让我们花费大量的时间在页面以及 CSS 样式编写上.因此可以使用开源组件库,有些复杂的组件可以直接拿来使用,节省开发时间, ...

  3. 微信小程序开发04-打造自己的UI库

    前言 github地址:https://github.com/yexiaochai/wxdemo 接上文继续,我们前面学习了小程序的生命周期.小程序的标签.小程序的样式,后面我们写了一个简单的load ...

  4. 5个最优秀的微信小程序UI组件库

    开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面5款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...

  5. 6个最优秀的微信小程序UI组件库

    开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面6款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...

  6. 6个优秀的微信小程序ui组件库

    开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面6款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...

  7. 小程序开发-6个优秀的UI组件库

    微信小程序开发,当原生的控件不能满足我们时,可以尝试下面几个比较优秀的组件库. 1. WeUI WXSS WeUI WXSS是腾讯官方UI组件库WeUI的小程序版,提供了跟微信界面风格一致的用户体验. ...

  8. 1、小程序Vant_WebApp组件库的安装步骤和简单使用

    Vant 1.小程序对于npm的支持 目前,小程序当中已经支持使用npm安装的第三方包,通过使用这些第三方包,我们可以提高对小程序开发的效率,但是在小程序当中使用所谓的npm包有如下的三个限制 不能支 ...

  9. 微信小程序学习指南

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

随机推荐

  1. C# 小工具开发--DeBugHttp

    随着RESTful的流行,前后端分离,我们后端开发人员在开发过程中多http相关方法进行测试.这就是这个小工具的初衷. 代码地址:https://github.com/gdoujkzz/DebugHt ...

  2. 【SQLServer】“无法对数据库’XXX’ 执行删除,因为它正用于复制”的解决方法

    警告: 一个或多个现有列的 ANSI_PADDING 设置为 "off",将以 ANSI_PADDING 为 "on" 的设置重新创建 [SQLServer]& ...

  3. 框架介绍thinkphp

    ThinkPHP是一个免费开源的,快速.简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPH ...

  4. c# udp局域网通信

    udp224.0.0.1 子网上的所有系统224.0.0.2 子网上的所有路由器224.0.0.12 dhcp服务器224.0.1.1 ntp224.0.1.24 wins服务器 http://www ...

  5. 增强拉格朗日乘子法(Augmented Lagrange Method)

    增强拉格朗日乘子法的作用是用来解决等式约束下的优化问题, 假定需要求解的问题如下: minimize f(X) s.t.: h(X)=0 其中,f:Rn->R; h:Rn->Rm 朴素拉格 ...

  6. php代码优化系列 -- array_walk 和 foreach, for 的效率的比较

    实验是我学习计算机科学的一个重要方法,计算机科学不是简单的智力游戏,它本质上来说不是一门科学,而是一个改造世界的工具.数学方法和实验方法是计算机研究的基本方法,也是我们学习的基本方法,数学锻炼我们的思 ...

  7. beanstalkd----协议

    Beanstalkd中文协议 总括 beanstalkd协议基于ASCII编码运行在tcp上.客户端连接服务器并发送指令和数据,然后等待响应并关闭连接.对于每个连接,服务器按照接收命令的序列依次处理并 ...

  8. Linux图片批处理

    通过imagemagick的convert命令来处理. 将多个图片横向拼接(宽图): convert +append 1.jpg 2.jpg all.jpg #人为指定顺序 convert +appe ...

  9. Method not found : Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)

    找不到方法:“Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean) ...

  10. spark单机环境下运行一些解决问题

    ERROR1.hadoop依赖 [ERROR] - Failed to locate the winutils binary in the hadoop binary path   java.io.I ...