你好,游客 登录 注册 搜索
背景:
阅读新闻

在OpenSSL中添加自定义加密算法

[日期:2015-08-16] 来源:Linux社区  作者:红孩儿你好 [字体: ]

一、简介

本文以添加自定义算法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提供FTP+SSL/TLS认证功能,并实现安全数据传输 http://www.linuxidc.com/Linux/2013-05/84986.htm

Linux下使用OpenSSL生成证书 http://www.linuxidc.com/Linux/2015-05/117034.htm

利用OpenSSL签署多域名证书 http://www.linuxidc.com/Linux/2014-10/108222.htm

OpenSSL 的详细介绍请点这里
OpenSSL 的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-08/121749.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款