国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
openssl之EVP系列之7---信息摘要算法結(jié)構(gòu)概述
openssl之EVP系列之7---信息摘要算法結(jié)構(gòu)概述
   ---根據(jù)openssl doc\crypto\EVP_DigestInit.pod翻譯和自己的理解寫(xiě)成
   (作者:DragonKing, Mail: wzhah@263.net ,發(fā)布于:http://openssl.126.com 之openssl專(zhuān)業(yè)論壇,版本:openssl-0.9.7)
  
   該系列函數(shù)封裝了openssl加密庫(kù)所有的信息摘要算法,通過(guò)這種EVP封裝,當(dāng)使用不同的信息摘要算法時(shí),只需要對(duì)初始化參數(shù)修改一下就可以了,其它代碼可以完全一樣。這些算法包括MD2、MD5以及SHA等算法。
   【EVP_MD結(jié)構(gòu)介紹】
   所有的算法都維護(hù)著下面定義的結(jié)構(gòu)的一個(gè)指針,在此基礎(chǔ)上實(shí)現(xiàn)了算法的功能。該結(jié)構(gòu)EVP_MD如下:
   typedef struct env_md_st
   {
   int type;
   int pkey_type;
   int md_size;
   unsigned long flags;
   int (*init)(EVP_MD_CTX *ctx);
   int (*update)(EVP_MD_CTX *ctx,const void *data,unsigned long count);
   int (*final)(EVP_MD_CTX *ctx,unsigned char *md);
   int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from);
   int (*cleanup)(EVP_MD_CTX *ctx);
   int (*sign)();
   int (*verify)();
   int required_pkey_type[5]; /*EVP_PKEY_xxx */
   int block_size;
   int ctx_size;
   } EVP_MD;
   下面對(duì)該結(jié)構(gòu)體的部分參數(shù)解釋?zhuān)?br>   type——信息摘要算法的NID標(biāo)識(shí)
   pkey_type——是信息摘要-簽名算法體制的相應(yīng)NID標(biāo)識(shí),如NID_shaWithRSAEncryption
   md_size——是信息摘要算法生成的信息摘要的長(zhǎng)度,如SHA算法是SHA_DIGEST_LENGTH,該值是20
   init——指向一個(gè)特定信息摘要算法的初始化函數(shù),如對(duì)于SHA算法,指針指向SHA_Init
   update——指向一個(gè)真正計(jì)算摘要值的函數(shù),例如SHA算法就是指向SHA_Update
   final——指向一個(gè)信息摘要值計(jì)算之后要調(diào)用的函數(shù),該函數(shù)完成最后的一塊數(shù)據(jù)的處理工作。例如SHA算法就是指向SHA_Final.
   copy——指向一個(gè)可以在兩個(gè)EVP_MD_CTX結(jié)構(gòu)之間拷貝參數(shù)值的函數(shù)
   required_pkey_type——指向一個(gè)用來(lái)簽名的算法EVP_PKEY的類(lèi)型,如SHA算法就指向EVP_PKEY_RSA_method
   block_size——一個(gè)用來(lái)進(jìn)行信息摘要的輸入塊的的長(zhǎng)度(單位是字節(jié)),如SHA算法就是SHA_CBLOCK
   ctx_size——是CTX結(jié)構(gòu)的長(zhǎng)度,在SHA算法里面應(yīng)該就是sizeof(EVP_MD*)+sizeof(SHA_CTX)
如果你要增加新的算法,那么可以定義這個(gè)結(jié)構(gòu),并進(jìn)行必要的一直,然后就可以使用通用的函數(shù)了。跟EVP_CIPHER系列函數(shù)一樣,使用這個(gè)封裝技術(shù),就可以在使用一種摘要算法時(shí),比如MD5,在連接程序的時(shí)候就只連接MD5的代碼。如果使用證書(shū)來(lái)標(biāo)識(shí)算法,那么就會(huì)導(dǎo)致所有其它的信息摘要算法代碼都連接到程序中去了。
   【EVP_MD_CTX結(jié)構(gòu)介紹】
   在調(diào)用函數(shù)的時(shí)候,一般來(lái)說(shuō)需要傳入上面說(shuō)的type的參數(shù)和下面所定義的一個(gè)CTX結(jié)構(gòu),該結(jié)構(gòu)EVP_MD_CTX定義如下:
   typedef struct env_md_ctx_st
   {
   const EVP_MD *digest;
   ENGINE *engine;
   unsigned long flags;
   void *md_data;
   }EVP_MD_CTX ;
   該結(jié)構(gòu)的成員解釋如下:
   digest——指向上面介紹的EVP_MD結(jié)構(gòu)的指針
   engine——如果算法由ENGINE提供,該指針指向該ENGINE
   md_data——信息摘要數(shù)據(jù)
   【支持的信息摘要算法】
   EVP_md_null(void)
   EVP_md2(void)
   EVP_md4(void)
   EVP_md5(void)
   EVP_sha(void)
   EVP_sha1(void)
   EVP_dss(void)
   EVP_dss1(void)
   EVP_mdc2(void)
   EVP_ripemd160(void)
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
?OpenSSL常用函數(shù)(簽名與驗(yàn)證
MessageDigest簡(jiǎn)介
數(shù)字簽名和哈希函數(shù)
Sha1WithRSA簽名的問(wèn)題 支付寶 簽名
用OpenSSL 做HMAC(C++)
數(shù)字加密大廈將傾
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服