当前位置:首页 > 新一代商户接入手册V2.7
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:存放密文的缓存长度,输入长度不可太短,否则函数返回失败。函数返回时此参数为实际密文的长度。
返回值: 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(\失败\
共分享92篇相关文档