在OpenSSL中添加自定义加密算法
一、简介
本文以添加自定义算法EVP_ssf33为例,介绍在OpenSSL中添加自定义加密算法的方法
二、步骤
1、修改crypto/object/objects.txt,注册算法OID,如下:
rsadsi 3 255 : SSF33 : ssf33
2、进入目录:crypto/object/,执行如下命令,生成算法的声明
perl objects.pl objects.txt obj_mac.num obj_mac.h
3、在crypto/evp/下添加e_ssf33.c,内容如下
#include <stdio.h>
#include "cryptlib.h"
#ifndef OPENSSL_NO_RC4
#include <openssl/evp.h>
#include <openssl/objects.h>
#include <openssl/rc4.h> /* FIXME: surely this is available elsewhere? */
#define EVP_SSF33_KEY_SIZE 16 typedef struct
{
RC4_KEY ks; /* working key */
} EVP_SSF33_KEY; #define data(ctx) ((EVP_SSF33_KEY *)(ctx)->cipher_data) static int ssf33_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv,int enc); static int ssf33_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl); static const EVP_CIPHER ssf33_evp_cipher=
{
NID_ssf33,
1,
EVP_SSF33_KEY_SIZE,
0,
EVP_CIPH_VARIABLE_LENGTH,
ssf33_init_key,
ssf33_cipher,
NULL,
sizeof(EVP_SSF33_KEY),
NULL,
NULL,
NULL,
NULL
}; const EVP_CIPHER *EVP_ssf33(void)
{
return(&ssf33_evp_cipher);
} static int ssf33_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc)
{
RC4_set_key(&data(ctx)->ks,EVP_CIPHER_CTX_key_length(ctx), key); return 1;
} static int ssf33_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl)
{
RC4(&data(ctx)->ks,inl,in,out); return 1;
} #endif
4、修改crypto/evp/evp.h,添加对算法的声明,如下
const EVP_CIPHER *EVP_ssf33(void);
5、修改crypto/evp/c_allc.c,在OpenSSL_add_all_ciphers函数中使用EVP_add_cipher注册加密函数,如下
EVP_add_cipher(EVP_ssf33());
6、修改crypto/evp/Makefile,如下

7、完成
在OpenSSL中添加自定义加密算法的更多相关文章
- OpenSSL 中 RSA 加密解密实现源代码分析
1.RSA 公钥和私钥的组成.以及加密和解密的公式: 2.模指数运算: 先做指数运算,再做模运算.如 5^3 mod 7 = 125 mod 7 = 6 3.RSA加密算法流程: 选择一对不同的.而且 ...
- 如何在dede栏目设置中添加自定义字段(dede二次开发-纯抄贴)
如何在dede栏目设置中添加自定义字段 这个说法以前没有见到到,很少有客户会提出这样的二次要求,今天织梦者在网上转了一下看到了这样的一篇文章转过来与大家分享 鉴于这个教程没人发过,网上搜索的人也比较多 ...
- OPENSSL安装 以及使用openssl中的AES加密和解密
OPENSSL安装:(VS) 1:第一步和所有的软件安装一样. 2:将OPENSSL中INLUCDE 和 LIB 分别拷贝到VS中VC的INLUCDE 和LIB目录下(我的机器上的目录是:C:\Pro ...
- OPENSSL中RSA私钥文件(PEM格式)解析【一】
http://blog.sina.com.cn/s/blog_4fcd1ea30100yh4s.html 在PKCS#1 RSA算法标准中定义RSA私钥语法为: RSAPrivateKey ::= S ...
- OpenSSL中的大数接口与基于其的自用RSA加密接口设计
本文记录了初次接触OpenSSL中的大数模块,重温了RSA加密流程,使用OpenSSL的接口包装成自用RSA加密接口,并且利用自己的接口演示了Alice与Bob通过RSA加密进行通讯的一个示例. 概览 ...
- 向集合中添加自定义类型--建议在自定义类型的时候要重写equals方法
package com.bjpowernode.t01list; import java.util.ArrayList; /* * 向集合中添加自定义类型 */public class TestLis ...
- ZigBee协议栈中AES加密算法
原文地址:ZigBee协议栈中AES加密算法作者:大浪淘沙 Z-stack对Zigbee2006提供了全面的支持,功能之强大,性能稳定.安全性高,说到安全性是我们今天的主题.CC2430硬件支持128 ...
- 在UIWebView中添加自定义编辑菜单
如何在UIWebView中添加自定义的编辑菜单困扰了很久.没想到意外的简单! 现在很多的内容提供类应用中,长按内容页会选中按的单词并且显示一个编辑菜单.如图: 独乐乐不如众乐乐.一篇好文章是需要大家一 ...
- 如何在asp.net mvc中添加自定义的HTML辅助种方法
很久没在博客园发表文章了,今天来总结一下如何在asp.net mvc中添加自定义的HTML辅助方法.我们现在设计这么一个目前,利用自定义的HTML方法来渲染一个普通的img标记.直接进入主题吧: 首先 ...
随机推荐
- Unit07: MyBatis框架简介 、 MyBatis基本应用
Unit07: MyBatis框架简介 . MyBatis基本应用 1. myBatis (1)myBatis是什么? 是一个开源的持久层框架. 注:myBatis底层仍然是jdbc. (2)编程步骤 ...
- C++ 命名空间解释
using关键字 如果在程序中需要多次引用某个命名空间的成员,那么按照之前的说法,我们每次都要使用范围解析符来指定该命名空间,这是一件很麻烦的事情.为了解决这个问题,人们引入了using关键字.usi ...
- SPUtils
public class SPUtils { /** * 保存在手机里的SP文件名 */ public static final String FILE_NAME = "my_sp" ...
- Java程序员之JS(一) 之 JQuery.ajax
背景:紧着现在项目的需要,先从JQuery.ajax出发,主要需求是通过 js 调用Java 代码,从而适应现在的项目. 先从几个概念开始讲解: 一. 什么是Deferred Deferred 对象 ...
- Git操作行
基础层:-----------------#初始化一个版本仓库git init #复制远程版本库git clone url #添加远程版本库origingit remote add origin ur ...
- 后台给GridView绑定数据时给每一行添加一个JS方法
--------JS function ReturnDictionaryValues(srcElement) { top.document.getElementById("_DialogFr ...
- 01——微信小程序官方demo讲解——文件结构
1.环境概览 首先环境配置的部分略过,打开小程序开发工具.选择一个空目录,即可开始一个demo项目. 其中新建成功后的目录如图所示: 2.文件结构描述 如图所示,左边是界面展示,右边是目录结构. 目录 ...
- python学习笔记(五):装饰器、生成器、内置函数、json
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...
- ubuntu用户添加adduser, useradd并给予sudo权限
ubuntu用户添加adduser, useradd并给予sudo权限 2016-06-15 10:36 1286人阅读 评论(0) 收藏 举报 分类: Ubuntu(80) ubuntu和win ...
- ce
一,什么是epel 如果既想获得 RHEL 的高质量.高性能.高可靠性,又需要方便易用(关键是免费)的软件包更新功能,那么 Fedora Project 推出的 EPEL(Extra Packages ...