利用ENGINE替換OPENSSL中的加解密演算法

2021-04-01 11:22:27 字數 2924 閱讀 7257

利用engine替換openssl中的加解密演算法

一:engine的目的:

engine

是openssl

預留的載入第三方加密庫,主要包括了動態庫載入的**和加密函式指標管理的一系列介面。如果要使用

engine

(假設你已經載入上該

engine

了),那麼首先要

load

該engine(

比如engine_load_***x)

,然後選擇要使用的演算法或者使用支援的所有加密演算法(有相關函式)。這樣你的應用程式在呼叫加解密演算法時,它就會指向你載入的動態庫里的加解密演算法,而不是原先的

openssl

的libeay32.dll

庫里的加解密演算法。

二:engine原理:

使用你自己編譯的加解密動態庫里的函式的指標或硬體介面指標來替換

openssl

中預設的加解密函式,類似於

hook

,這樣實現動態載入第三方密碼庫;

三:engine操作流程:

例如替換

rsa:

no.1

宣告你要替換的函式名稱和其它內部使用的函式

no.2

宣告rsa_method

結構,要替換的函式就提供函式名,不提換就是

null

了,還有其它的型別也要填上;

no.3

利用engine_init

等一系列函式初始化

engine

庫(其實上就是在初始化加

解密演算法),主要是繫結特定的函式指標(自定義)和結構或初始化硬體裝置等等操作;

engine_finish

也是一樣,做一些清理工作;

no.4

實現真正的介面,包括

rsa金鑰結構的轉換,如果是不能取出的私鑰,要

儲存硬體裝置提供的指標(通常是

handle

)等等操作。然後呼叫硬體的加密解密函式。

四:程式例項:(實現engine

no.1

宣告函式名稱

static int rsaref_private_decrypt(int len, const unsigned char *from, unsigned char *to, rsa *rsa, int padding);

no.2

宣告rsa_method

結構static rsa_method rsaref_rsa =

;no.3

**實現

static int rsaref_private_decrypt(int len, const unsigned char *from, unsigned char *to, rsa *rsa, int padding)

no.4

初始化engine

static int bind_rsaref(engine *e)

int bind_helper(engine *e, const char *id)

__declspec( dllexport ) void engine_load_rsaref(void)

五:操作engine(使用engine)

no.1

載入engine

一般是呼叫動態庫中的

engine_load_***x(

例子中是

engine_load_rsare)

,把engine

物件載入到系統中,其實就是在

engine

物件和rsa

的結構裡了

engine

物件(參見

rsa結構中的

engine

定義)建立了乙個關聯,這樣在用到

rsa演算法時如果

rsa中的

engine

物件為null

,則呼叫預設的加解密演算法,否則呼叫

engine

物件裡的加解密演算法。

no.2

指定你所需要的

engine

應用程式中可能要用到不只乙個

engine

介面,它們按鍊錶的形式組織在一起,

這樣你就需要指定你需要的

engine

介面;例:

engine *e = engine_by_id("rsaref");

返回的engine

物件裡就指向你自定義的加解密介面。

no.3

選擇演算法

engine_set_default(engine *e, int flag)

flag description

engine_method_all

使用所有存在的演算法(預設

)

engine_method_rsa

僅使用rsa

演算法engine_method_dsa

僅使用dsa

演算法engine_method_dh

僅使用dh

演算法engine_method_rand

僅使用隨機數演算法

engine_method_ciphers

僅使用對稱加解密演算法

engine_method_digests

僅使用摘要演算法

no.4

使用加解密演算法

使用engine

替換了演算法後不影響原用或現用所有對加解密函式的呼叫操作。

利用ENGINE替換OPENSSL中的加解密演算法

利用engine 替換openssl中的 檔案 pkcs11 engine.zip 大小 332kb 一 engine的目的 engine是openssl預留的載入第三方加密庫,主要包括了動態庫載入的 和加密函式指標管理的一系列介面。如果要使用engine 假設你已經載入上該engine了 那麼首先...

利用ENGINE替換OPENSSL中的加解密演算法

一 engine的目的 engine是openssl預留的載入第三方加密庫,主要包括了動態庫載入的 和加密函式指標管理的一系列介面。如果要使用engine 假設你已經載入上該engine了 那麼首先要load該engine 比如engine load x 然後選擇要使用的演算法或者使用支援的所有加密...

Linux 下利用trash替換rm

linux 下利用trash替換rm rmtrash 是linux和mac下命令列版本rm的 站,安裝後對使用者透明,符合正常使用rm的習慣 支援rm fr file哦 有了他再也不怕rm時候手顫抖了 能自動拒絕 rm fr 哦 1 wget no check certificate 2 mv rm...