程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 在OpenSSL中添加自定義加密算法,openssl加密算法

在OpenSSL中添加自定義加密算法,openssl加密算法

編輯:關於C語言

在OpenSSL中添加自定義加密算法,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、完成

 

參考:http://blog.csdn.net/force_eagle/article/details/794856

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved