zoukankan      html  css  js  c++  java
  • 在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,如下

    image

    7、完成

  • 相关阅读:
    性能测试目的
    什么是 JavaConfig?
    Spring Boot 有哪些优点?
    .什么是 Spring Boot?
    简述什么是静态测试、动态测试、黑盒测试、白盒测试、α测试 β测试
    mvc不知道参数名,获取所有参数和值
    18.核心
    Kotlin基础-集合类型 数组
    list可以存放的数据大小
    SpringBoot项目集成Flyway配置执行顺序问题
  • 原文地址:https://www.cnblogs.com/274914765qq/p/4697061.html
Copyright © 2011-2022 走看看