91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 2KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-06-10
  • 語(yǔ)言: Java
  • 標(biāo)簽: MD5withRSA??

資源簡(jiǎn)介

該資源通過(guò)C客戶端MD5withRSA算法簽名,java服務(wù)端進(jìn)行驗(yàn)簽。之前一直對(duì)接不上,網(wǎng)上資料也不全,算法對(duì)接不同,padding方式不一等導(dǎo)致對(duì)接失敗,故分享。

資源截圖

代碼片段和文件信息

#include?“RSA.h“

/*?對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行base64編碼?*/
/*?input:數(shù)組,length:數(shù)組長(zhǎng)度result:存儲(chǔ)編碼后的數(shù)據(jù),size:數(shù)組大小?*/
unsigned?char?*base64(const?void?*input?size_t?lengthchar?*result?size_t?size)
{
? BIO?*bmem?*b64;
?? BUF_MEM?*bptr;

?? b64?=?BIO_new(BIO_f_base64());
?? bmem?=?BIO_new(BIO_s_mem());
?? b64?=?BIO_push(b64?bmem);
?? BIO_write(b64?input?length);
?? BIO_flush(b64);
?? BIO_get_mem_ptr(b64?&bptr);

if(size?length-1)
{
printf(“the?size?is?so?small\n“);
return?NULL;
}
?? memcpy(result?bptr->data?bptr->length-1);
?? result[bptr->length-1]?=?0;
?? BIO_free_all(b64);

?? return?result;
}
/*?對(duì)base64數(shù)據(jù)進(jìn)行解碼?*/
/*?input:待解碼數(shù)組,length:數(shù)組長(zhǎng)度,result:解碼后數(shù)據(jù)暫存區(qū),暫存區(qū)大小?*/
unsigned?char?*debase64(char?*input?size_t?length?char?*result?size_t?size)
{
???? BIO?*?b64?=?NULL;
???? BIO?*?bmem?=?NULL;
???? assert(NULL?!=?input);
???? if?(length?>?size)
???????? return?NULL;
???? memset(result?0?size);

???? b64?=?BIO_new(BIO_f_base64());
???? bmem?=?BIO_new_mem_buf(input?length);
???? BIO_set_flags(b64?BIO_FLAGS_base64_NO_NL);
???? if?(NULL?==?b64?||?NULL?==?bmem)?
{
??????? perror(“BIO_new“);
???????? return?NULL;
??? }
???? bmem?=?BIO_push(b64?bmem);
???? BIO_read(bmem?result?length);
???? BIO_free_all(b64);
???? return?result;
}
/*?生成簽名函數(shù)?*/
/*?1:私鑰名,2:待簽名的數(shù)據(jù),3:簽名后的數(shù)據(jù)存儲(chǔ)區(qū),4:傳入指針?*/
unsigned?char?*?GetSign(char*?keyFilechar*?plainTextunsigned?char*?cipherTextunsigned?int?*cipherTextLen)??
{?????
???? FILE*?fp?=?fopen?(keyFile?“r“);??
???? if?(fp?==?NULL)???
???????? return?NULL;??
??
???? /*?Read?private?key?*/??
???? EVP_PKEY*?pkey?=?PEM_read_PrivateKey(fp?NULL?NULL?NULL);??
???? fclose?(fp);??
??
???? if?(pkey?==?NULL)?
{???
???????? ERR_print_errors_fp?(stderr);??
???????? return?NULL;??
???? }??
??
???? /*?Do?the?signature?*/??
???? EVP_MD_CTX?????md_ctx;??
???? EVP_SignInit???(&md_ctx?EVP_md5());??
???? EVP_SignUpdate?(&md_ctx?plainText?strlen(plainText));??
???? int?err?=?EVP_SignFinal?(&md_ctx?cipherText?cipherTextLen?pkey);??
??
???? if?(err?!=?1)?{??
???????? ERR_print_errors_fp(stderr);??
???????? return?NULL;??
???? }??
??
???? EVP_PKEY_free(pkey);??
???? return?cipherText;??
}??
/*?驗(yàn)證簽名函數(shù)?*/
/*?1:公鑰名,2:簽名的數(shù)據(jù),3:簽名的數(shù)據(jù)大小,4:原數(shù)據(jù)?*/
bool?VerifySign(char*?certFileunsigned?char*?cipherTextunsigned?int?cipherTextLenchar*?plainText)??
{??
???? FILE*?fp?=?fopen(certFile?“r“);??
???? if?(fp?==?NULL)???
???????? return?false;??
???? EVP_PKEY?*pkey=PEM_read_PUBKEY(fpNULLNULLNULL);??
???? if?(pkey?==?NULL)?
{??
printf(“pkey?fail\n“);
???????? ERR_print_errors_fp?(stderr);??
???????? return?false;??
???? }??
???? EVP_MD_CTX?md_ctx;??
???? EVP_VerifyInit???(&md_ctx?EVP_md5());??
???? EVP_VerifyUpdate?(&md_ctx?plainText?strlen((char*)plainText));??
???? int?err?=?EVP_VerifyFinal?(&md_ctx?cipherText?cipherTextLen?pkey);??
???? EVP_PKEY_free?(pkey);??
??
???? if?(err?!=?1)?{??
???????? ERR_print_errors_fp?(stderr);??
???????? return?false;??
???? }
?? fclose(fp);
???? return?true;??
}

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????3222??2018-01-12?16:02??RSA.c
?????文件?????????727??2018-01-12?16:03??RSA.h
?????文件?????????614??2018-01-12?16:11??RSA_test.c

評(píng)論

共有 條評(píng)論