利用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...