久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

openssl之EVP系列之7---信息摘要算法結(jié)構(gòu)概述

 MikeDoc 2011-01-12
openssl之EVP系列之7---信息摘要算法結(jié)構(gòu)概述
   ---根據(jù)openssl doc\crypto\EVP_DigestInit.pod翻譯和自己的理解寫成
   (作者:DragonKing, Mail: [email protected] ,發(fā)布于:http://openssl.126.com 之openssl專業(yè)論壇,版本:openssl-0.9.7)
  
   該系列函數(shù)封裝了openssl加密庫所有的信息摘要算法,,通過這種EVP封裝,當(dāng)使用不同的信息摘要算法時,,只需要對初始化參數(shù)修改一下就可以了,,其它代碼可以完全一樣,。這些算法包括MD2,、MD5以及SHA等算法,。
   【EVP_MD結(jié)構(gòu)介紹】
   所有的算法都維護著下面定義的結(jié)構(gòu)的一個指針,,在此基礎(chǔ)上實現(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;
   下面對該結(jié)構(gòu)體的部分參數(shù)解釋:
   type——信息摘要算法的NID標(biāo)識
   pkey_type——是信息摘要-簽名算法體制的相應(yīng)NID標(biāo)識,如NID_shaWithRSAEncryption
   md_size——是信息摘要算法生成的信息摘要的長度,,如SHA算法是SHA_DIGEST_LENGTH,,該值是20
   init——指向一個特定信息摘要算法的初始化函數(shù),如對于SHA算法,,指針指向SHA_Init
   update——指向一個真正計算摘要值的函數(shù),,例如SHA算法就是指向SHA_Update
   final——指向一個信息摘要值計算之后要調(diào)用的函數(shù),該函數(shù)完成最后的一塊數(shù)據(jù)的處理工作,。例如SHA算法就是指向SHA_Final.
   copy——指向一個可以在兩個EVP_MD_CTX結(jié)構(gòu)之間拷貝參數(shù)值的函數(shù)
   required_pkey_type——指向一個用來簽名的算法EVP_PKEY的類型,,如SHA算法就指向EVP_PKEY_RSA_method
   block_size——一個用來進行信息摘要的輸入塊的的長度(單位是字節(jié)),如SHA算法就是SHA_CBLOCK
   ctx_size——是CTX結(jié)構(gòu)的長度,,在SHA算法里面應(yīng)該就是sizeof(EVP_MD*)+sizeof(SHA_CTX)
如果你要增加新的算法,,那么可以定義這個結(jié)構(gòu),并進行必要的一直,,然后就可以使用通用的函數(shù)了,。跟EVP_CIPHER系列函數(shù)一樣,使用這個封裝技術(shù),, 就可以在使用一種摘要算法時,,比如MD5,在連接程序的時候就只連接MD5的代碼,。如果使用證書來標(biāo)識算法,,那么就會導(dǎo)致所有其它的信息摘要算法代碼都連 接到程序中去了。
   【EVP_MD_CTX結(jié)構(gòu)介紹】
   在調(diào)用函數(shù)的時候,,一般來說需要傳入上面說的type的參數(shù)和下面所定義的一個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)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多