http://www.ChinaPay.com ChinapayÐÂÒ»´úÉÌ»§½ÓÈëÊÖ²á
1£º³É¹¦ 0£ºÊ§°Ü
?
Êý¾ÝÇ©Ãûº¯Êý: sign ·½·¨ËµÃ÷£º
bool sign(const char* filename, const char* password,
const unsigned char* unSignData, size_t uslen, unsigned char* signData, size_t* slen);
×÷Óãº
¶Ô´«ÈëµÄ×Ö·û´®½øÐÐÊý×ÖÇ©Ãû ²ÎÊý˵Ã÷£º
filename£ºÃØÔ¿Îļþ·¾¶ password£ºÃØÔ¿ÎļþÃÜÂë unSignData£º´ýÇ©Ãû×Ö·û´® uslen£º´úÇ©Ãû×Ö·û´®³¤¶È
signData£º´æ·ÅÇ©Ãû½á¹ûµÄ»º´æµØÖ·
slen£º´æ·ÅÇ©Ãû½á¹ûµÄ»º´æ³¤¶È£¬ÊäÈ볤¶È²»¿ÉÌ«¶Ì£¬·ñÔòº¯Êý·µ»ØÊ§°Ü¡£º¯Êý·µ»ØÊ±´Ë²ÎÊýΪʵ¼ÊÇ©Ãû½á¹ûµÄ³¤¶È¡£
·µ»ØÖµ£º 1£º³É¹¦ 0£ºÊ§°Ü
?
Êý¾ÝÇ©ÃûÑéÖ¤º¯Êý: verify
size_t uslen, const unsigned char* signData, size_t slen);
bool verify(const char* filename, const unsigned char* unSignData, ×÷Óãº
Ñé֤Ŀ±ê×Ö·û´®µÄÇ©ÃûÊÇ·ñÕýÈ· ²ÎÊý˵Ã÷£º
filename£ºÃØÔ¿Îļþ·¾¶ unSignData£ºÔ´×Ö·û´®µØÖ· uslen£ºÔ´×Ö·û´®³¤¶È signData£ºÇ©Ãû×Ö·û´®µØÖ· slen£ºÇ©Ãû×Ö·û´®³¤¶È ·µ»ØÖµ£º 1£º³É¹¦ 0£ºÊ§°Ü
?
ÎļþÇ©ÃûÑéÖ¤º¯Êý: verifyFile
bool verifyFile(const char* certpath, const char* filepath); ×÷Óãº
ÑéÖ¤ÎļþµÄÇ©ÃûÊÇ·ñÕýÈ· ²ÎÊý˵Ã÷£º
certpath£ºÃØÔ¿Îļþ·¾¶
µÚ 25 Ò³ ¹² 35 Ò³
http://www.ChinaPay.com ChinapayÐÂÒ»´úÉÌ»§½ÓÈëÊÖ²á
filepath£º½»Ò×Ö¤Êé·¾¶ ·µ»ØÖµ£º 1£º³É¹¦ 0£ºÊ§°Ü
?
Êý¾Ý¼ÓÃܺ¯Êý: encrypt
unsigned char* to, size_t* tlen);
bool encrypt(const char* filename, unsigned char* from, size_t flen, ×÷Ó㺠¶ÔÊý¾Ý½øÐмÓÃÜ ²ÎÊý˵Ã÷£º
filename£ºÃØÔ¿Îļþ·¾¶ from£º´ý¼ÓÃÜ×Ö·û´® flen£º´ý¼ÓÃÜ×Ö·û´®³¤¶È to£º´æ·ÅÃÜÎĵĻº´æµØÖ·
tlen£º´æ·ÅÃÜÎĵĻº´æ³¤¶È£¬ÊäÈ볤¶È²»¿ÉÌ«¶Ì£¬·ñÔòº¯Êý·µ»ØÊ§°Ü¡£º¯Êý·µ»ØÊ±´Ë²ÎÊýΪʵ¼ÊÃÜÎĵij¤¶È¡£
·µ»ØÖµ£º 1£º³É¹¦ 0£ºÊ§°Ü
?
Êý¾Ý½âÃܺ¯Êý: decrypt
size_t flen, unsigned char* to, size_t* tlen);
bool decrypt(const char* filename, const char* password, unsigned char* from, ×÷Ó㺠¶ÔÃÜÎĽøÐнâÃÜ ²ÎÊý˵Ã÷£º
filename£ºÃØÔ¿Îļþ·¾¶ password£ºÃØÔ¿ÎļþÃÜÂë from£ºÃÜÎÄ×Ö·û´® flen£ºÃÜÎÄ×Ö·û´®³¤¶È
to£º´æ·Å½âÃܺó×Ö·û´®µÄ»º´æ³¤¶È£¬ÊäÈ볤¶È²»¿ÉÌ«¶Ì£¬·ñÔòº¯Êý·µ»ØÊ§°Ü¡£º¯Êý·µ»ØÊǴβÎÊýΪʵ¼Ê½âÃܺóµÄ×Ö·û´®µÄ³¤¶È¡£
·µ»ØÖµ£º 1£º³É¹¦ 0£ºÊ§°Ü
3.4.4.3 ʹÓÃʾÀý´úÂë
#include \#define KEY_LEN 6 #define MEM_LEN 1024 * 4
µÚ 26 Ò³ ¹² 35 Ò³
http://www.ChinaPay.com ChinapayÐÂÒ»´úÉÌ»§½ÓÈëÊÖ²á
int main(int argc, char* argv[]) {
if (sign(pfxfile, passwd, buff, buff_len, sign_buf, &sign_len)) {
printf((char*) sign_buf);
µÚ 27 Ò³ ¹² 35 Ò³
printf(\Êý¾ÝÇ©Ãû==========\\n\size_t sign_len = MEM_LEN;
unsigned char sign_buf[MEM_LEN]; // Ç©Ãû×Ö·û´® memset(sign_buf, 0, sign_len);
if (build_data(p, KEY_LEN, (char*) buff, &buff_len)) { }
printf((char*) buff);
printf(\×Ö´®³¤¶È==========\\n\printf(\printf(\ʧ°Ü\return 0;
printf(\¹¹Ôì×Ö·û´®==========\\n%unsigned char buff[MEM_LEN]; // Ç©ÃûÔÎÄ size_t buff_len = MEM_LEN; memset(buff, 0, buff_len); KEY_VALUE_PAIR p[KEY_LEN]; p[0].key = \
//ÉÌ »§ ºÅ
p[0].value = \p[1].key = \¶© µ¥ ºÅ p[1].value = \p[2].key = \ÉÌ»§ÈÕÆÚ p[2].value = \
p[3].key = \ÉÌ»§Ê±¼ä p[3].value = \
p[4].key = \¶©µ¥½ð¶î p[4].value = \
p[5].key = \½»Ò×ÀàÐÍ p[5].value = \
const char* pfxfile = \const char* passwd = \
const char* cerfile = \
const char* filepath = \
} else {
http://www.ChinaPay.com ChinapayÐÂÒ»´úÉÌ»§½ÓÈëÊÖ²á
}
µÚ 28 Ò³ ¹² 35 Ò³
return 0; printf(\
if (decrypt(pfxfile, passwd, enc_buf, enc_len, dec_buf, &dec_len)) { }
printf((char*) dec_buf); printf(\ʧ°Ü\} else {
if (encrypt(cerfile, buff, buff_len, enc_buf, &enc_len)) { }
printf(\½âÃÜ==========\\n\size_t dec_len = MEM_LEN; unsigned char dec_buf[MEM_LEN]; memset(dec_buf, 0, dec_len);
printf((char*) enc_buf); printf(\ʧ°Ü\} else {
printf(\¼ÓÃÜ==========\\n\size_t enc_len = MEM_LEN; unsigned char enc_buf[MEM_LEN]; memset(enc_buf, 0, enc_len);
printf(\ÎļþÑéÇ©==========\\n\if (verifyFile(cerfile, filepath)) { }
printf(\³É¹¦\printf(\ʧ°Ü\} else {
printf(\Êý¾ÝÑéÇ©==========\\n\
if (verify(cerfile, buff, buff_len, sign_buf, sign_len)) { }
printf(\³É¹¦\printf(\ʧ°Ü\} else { } else { }
printf(\ʧ°Ü\
Ïà¹ØÍÆ¼ö£º