freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

openssl之pemword版-在線瀏覽

2024-09-27 04:56本頁面
  

【正文】 enssl中原有的非標(biāo)準(zhǔn)的IV字段在新版的openssl中取消了,所以就剩下一個算法定義了,目前支持的算法如下述的定義:define PEM_DEK_DES_CBC 40define PEM_DEK_IDEA_CBC 45define PEM_DEK_DES_EDE 50define PEM_DEK_DES_ECB 60define PEM_DEK_RSA 70define PEM_DEK_RSA_MD2 80define PEM_DEK_RSA_MD5 90PEM系列函數(shù)中很多參數(shù)是相同意義的,也就是說通用的。 bp參數(shù)如果函數(shù)有該參數(shù),則定義了進行數(shù)據(jù)讀寫B(tài)IO接口。 TYPE類型參數(shù)PEM讀操作的系列函數(shù)都有TYPE **x 和返回TYEP *指針的參數(shù)。如果參數(shù)x是NULL,那么該參數(shù)將被忽略。如果x和*x都不是NULL,那么函數(shù)就試圖重用*x中的結(jié)構(gòu)體。 enc參數(shù)enc參數(shù)定義了PEM函數(shù)寫私鑰的時候采用的加密算法。如果該參數(shù)為NULL,那么私鑰就會以不加密的形式寫入相應(yīng)的接口。 kstr參數(shù)主要在PEM寫系列函數(shù)里面使用,如果該參數(shù)不為NULL,那么kstr中klen字節(jié)數(shù)據(jù)就用來作為口令,此時,cb參數(shù)就被忽略了。如果cb和u參數(shù)都是NULL,那么缺省的回調(diào)函數(shù)就會并使用,該函數(shù)一般在當(dāng)前的終端提示輸入口令,并且關(guān)掉了回顯功能?;氐胶瘮?shù)的形式如下:int cb(char *buf, int size, int rwflag, void *u)。size是考慮最大的長度(如buf的長度)。當(dāng)rwflag為1的時候,典型的函數(shù)一般會要求用戶驗證口令(如輸入兩次)?;卣{(diào)函數(shù)必須返回口令字符的數(shù)目,如果出錯返回0。此外,了解這些應(yīng)用,對于加深對PEM結(jié)構(gòu)的理解也是很有好處的。int PEM_do_header (EVP_CIPHER_INFO *cipher, unsigned char *data,long *len,pem_password_cb *callback,void *u)。void PEM_dek_info(char *buf, const char *type, int len, char *str)。返回的信息寫入到buf參數(shù)里面去,所以要求buf分配的內(nèi)存空間必須足夠大。當(dāng)然,可以通過使用RSAMD系列函數(shù)將PEM的數(shù)據(jù)信息進行摘要并將該結(jié)果作為PEM的MIC。 PEM_dek_info該函數(shù)跟上述函數(shù)相似,是根據(jù)type參數(shù)生成DEKinfo字段的信息,返回并寫入到buf里面。在這里,參數(shù)type應(yīng)該為加密算法的名字,原則上這個字符串可以是任意的,但是為了其它程序能夠正確解釋該字段,你可以先得到算法相應(yīng)的NID,然后通過調(diào)用nid2sn得到該算法的簡稱作為type參數(shù)。此時objstr就是一個包含了算法enc的簡稱的字符串。 PEM_do_header該函數(shù)并非顧名思義,事實上它完成了對一個PEM編碼對象的的解密工作(如果該PEM對象需要進行解密),該函數(shù)通常是被PEM_read_bio所調(diào)用的。其中,DEKinfo字段的信息應(yīng)該在調(diào)用本函數(shù)之前進行正確的處理,從而通過該字段的名字和ivec得到相應(yīng)的EVP_CIPHER結(jié)構(gòu)信息和IV變量,作為本函數(shù)的cipher參數(shù)。如果不是的話,那么該函數(shù)就需要一個口令來進行解密。回調(diào)函數(shù)的格式如下:callback(buffer, blen, verify)其中,參數(shù)buffer是保存返回口令的地方,blen是buffer的最大長度,verify參數(shù)是指明是否需要口令驗證(就是要求用戶輸入兩次相同的口令),默認(rèn)的是0。PEM_do_header函數(shù)得到口令后,就使用該口令(包括長度信息)跟cipher參數(shù)種的ivec變量一起對數(shù)據(jù)進行解密。該函數(shù)操作成功返回1,否則返回0。在調(diào)用該函數(shù)之前,PEM的ProcType頭信息應(yīng)該已經(jīng)作為明文被讀入到header參數(shù)中。如果不為NULL,那么該函數(shù)首先確定header信息是否以“ProcType:4,ENCRYPTED”開頭,如果是其它形式的,該函數(shù)將返回0,不進行處理。成功操作返回1,否則返回0。具體的情況請參考《openssl之EVP系列》相關(guān)章節(jié)。void PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl,unsigned char *in, int inl)。void PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type)。int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,unsigned int *siglen, EVP_PKEY *pkey)。其中,PEM_Seal*系列函數(shù)完成了對PEM對象、密鑰和IV變量的加密編碼工作,PEM_Sign系列函數(shù)完成了對PEM進行數(shù)字簽名的工作。首先,該函數(shù)使用參數(shù)md_type調(diào)用函數(shù)EVP_SignInit對信息摘要結(jié)構(gòu)ctxmd進行初始化。加密后的秘鑰保存在參數(shù)ek里面,其長度保存在ekl里面,這些數(shù)據(jù)都是調(diào)用了EVP_EncodeUpdate函數(shù)經(jīng)過了BASE64編碼的。該函數(shù)成功操作返回正值,否則返回0或-1。 PEM_SealUpdate函數(shù)該函數(shù)用來完成對PEM對象信息體的加密和編碼,使用的加密密鑰是PEM_SealInit函數(shù)產(chǎn)生的。在此同時,該函數(shù)也調(diào)用函數(shù)EVP_SignUpdate函數(shù)使用ctxmd的摘要算法結(jié)構(gòu)對參數(shù)in里的數(shù)據(jù)進行了信息摘要操作,不過暫時沒有輸出,等調(diào)用了PEM_SealFinal函數(shù)的時候進行輸出。 PEM_SealFinal函數(shù)該函數(shù)完成整個PEM_Seal系列的操作。同時,該函數(shù)還完成了信息摘要工作,并使用參數(shù)priv的私鑰對該信息進行簽名(加密),將結(jié)果經(jīng)過BASE64編碼后輸出到參數(shù)sig,sigl是sig有效數(shù)據(jù)的長度信息。需要注意的是,該函數(shù)運行完后,就將ctxmd和ctxcipher結(jié)構(gòu)釋放清除掉了,所以如果你想保存對稱加密算法使用的密鑰和IV的話,你需要在調(diào)用本函數(shù)之前就保存一個備份。 PEM_Seal操作總結(jié)完成上述三個函數(shù)的操作之后,你就得到了加密后的密鑰、IV(從PEM_SealInit函數(shù))以及PEM對象信息體,并且這些都是經(jīng)過BASE64編碼的。對方接受到這些信息后,使用他自己的私鑰以及你的公鑰,就能進行正確的數(shù)據(jù)解密和驗證。PEM_SignFinal則調(diào)用EVP_SignFinal函數(shù)完成信息摘要和簽名(使用參數(shù)pkey的私鑰)之后,調(diào)用了EVP_EncodeBlock對簽名信息進行了BASE64編碼,然后將編碼后的簽名信息保存在參數(shù)sigret,siglen保存了sigret有效數(shù)據(jù)的長度。 ERR_load_PEM_strings函數(shù)該函數(shù)使用了PEM庫的錯誤代碼信息對錯誤處理庫進行初始化,必須在使用任何PEM系列函數(shù)之前調(diào)用該函數(shù)。這些函數(shù)定義如下(openssl\):int PEM_read_bio(BIO *bp, char **name, char **header,unsigned char **data,long *len)。int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, const char *name, BIO *bp,pem_password_cb *cb, void *u)。int PEM_ASN1_write_bio(int (*i2d)(),const char *name,BIO *bp,char *x,const EVP_CIPHER *enc,unsigned char *kstr,int klen,pem_password_cb *cb, void *u)。int PEM_X509_INFO_write_bio(BIO *bp,X509_INFO *xi, EVP_CIPHER *enc,unsigned char *kstr, int klen, pem_password_cb *cd, void *u)。int PEM_write(FILE *fp,char *name,char *hdr,unsigned char *data,long len)。int PEM_ASN1_write(int (*i2d)(),const char *name,FILE *fp,char *x,const EVP_CIPHER *enc,unsigned char *kstr,int klen,pem_password_cb *callback, void *u)??梢钥吹?,這些函數(shù)中有很多參數(shù)在第3部分介紹過,在此將不再詳細(xì)介紹。該函數(shù)將文件里BEIGIN后面的字符作為對象名保存在參數(shù)name里面;將BEGIN所在行和下一個空白行之間的所有信息都讀入到參數(shù)header里面,如果之間沒有信息,就將header設(shè)置為NULL;然后將信息體進行BASE64解碼放置到data參數(shù)里面,len是data參數(shù)的有效數(shù)據(jù)長度。 PEM_read_bio函數(shù)該函數(shù)完成了跟PEM_read相同的功能,只不過讀取對象是BIO。該函數(shù)成功返回1,失敗返回0。 PEM_write_bio函數(shù)該函數(shù)跟PEM_write函數(shù)功能一樣,只是操作對象是BIO。成功返回PEM信息體的長度,失敗返回0。成功返回指向x的指針,否則返回NULL。因為函數(shù)調(diào)用了PEM_get_EVP_CIPHER_INFO函數(shù),所以為了函數(shù)能成功執(zhí)行,必須在調(diào)用本函數(shù)前加載算法。本函數(shù)可以從一個文件中讀取一些列對象。事實上,PEM_ASN1_read函數(shù)是調(diào)用本函數(shù)完成其功能的。 PEM_ASN1_write函數(shù)該函數(shù)將對象x使用i2d參數(shù)提供的函數(shù)轉(zhuǎn)換城DER編碼的數(shù)據(jù),接下來,如果enc參數(shù)不為NULL,就使用enc的加密算法加密這些數(shù)據(jù)。如果enc不是NULL,但是kstr是NULL,那么就會使用callback函數(shù)提示用戶輸入口令并獲取加密數(shù)據(jù);如果此時callback為NULL,但是u不為NULL,那么就是使用u作為產(chǎn)生加密密鑰的字符串,假定u應(yīng)該是NULL結(jié)束的字符串;如果callback和u都為NULL,那就會使用缺省的callback函數(shù)獲取口令。加密密鑰在函數(shù)調(diào)用完之后就被清除了。 PEM_ASN1_wirte_bio函數(shù)該函數(shù)實現(xiàn)的功能跟PEM_ASN1_write一樣,不過操作對象是BIO。成功操作返回1,否則返回0。該函數(shù)會對文件中的所有對象進行處理直到出錯或處理完畢。因為有可能有些對象是加密的,所以提供了參數(shù)cb和u。成功返回處理好的堆棧指針,否則返回NULL。事實上,PE
點擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1