中国黑防联盟

Linux为OpenSSL添加自定义加密算法的技巧

中国黑防联盟 电脑使用教程 2024-04-28 20:37:45 0
  Linux系统OpenSSL是一套密码库系统,所以Linux系统使用OpenSSL的过程中,就一定会涉及给OpenSSL添加加密算法,本文就来介绍一下Linux为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