新一代商户接入手册V2.7

发布时间 : 星期日 文章新一代商户接入手册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(\失败\

联系合同范文客服:xxxxx#qq.com(#替换为@)