Commit eeb33faa by LIDINGDA\ldd

1.3DES加密;2.RSA签名测试通过;签名时只取一级字段中的string和number

parent a5227c7f
No preview for this file type
......@@ -10,6 +10,7 @@
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/des.h>
#include "fmlog.h"
#include <jansson.h>
#include <jansson_private.h>
......@@ -465,6 +466,9 @@ public:
else if(json_is_array(value))
{
continue;
}else
{
continue;
}
outmsg.append(tmp);
outmsg.append("|");
......
......@@ -2,18 +2,25 @@
#define FM_ERROR_H
//#define ERROR_CLIENT_CFG "{\"statusCode\": 301, \"message\": \"DLL配置文件错误或不存在\"}"
#define ERROR_CLIENT_CFG "{\"statusCode\": 301, \"message\": \"DLL\u914D\u7F6E\u6587\u4EF6\u9519\u8BEF\u6216\u4E0D\u5B58\u5728\"}"
//#define ERROR_CLIENT_CFG "{\"statusCode\": 301, \"message\": \"DLL\u914D\u7F6E\u6587\u4EF6\u9519\u8BEF\u6216\u4E0D\u5B58\u5728\"}"
#define ERROR_CLIENT_CFG "{\"statusCode\": 301, \"message\": \"DLL\351\205\215\347\275\256\346\226\207\344\273\266\351\224\231\350\257\257\346\210\226\344\270\215\345\255\230\345\234\250\"}"
//#define ERROR_INDATA "{\"statusCode\": 302, \"message\": \"输入参数非json或为空\"}"
#define ERROR_INDATA "{\"statusCode\": 302, \"message\": \"\u8F93\u5165\u53C2\u6570\u975Ejson\u6216\u4E3A\u7A7A\"}"
//#define ERROR_INDATA "{\"statusCode\": 302, \"message\": \"\u8F93\u5165\u53C2\u6570\u975Ejson\u6216\u4E3A\u7A7A\"}"
#define ERROR_INDATA "{\"statusCode\": 302, \"message\": \"\350\276\223\345\205\245\345\217\202\346\225\260\351\235\236json\346\210\226\344\270\272\347\251\272\"}"
//#define ERROR_OUTDATA "{\"statusCode\": 303, \"message\": \"服务端返回数据异常\"}"
#define ERROR_OUTDATA "{\"statusCode\": 303, \"message\": \"\u670D\u52A1\u7AEF\u8FD4\u56DE\u6570\u636E\u5F02\u5E38\"}"
//#define ERROR_OUTDATA "{\"statusCode\": 303, \"message\": \"\u670D\u52A1\u7AEF\u8FD4\u56DE\u6570\u636E\u5F02\u5E38\"}"
#define ERROR_OUTDATA "{\"statusCode\": 303, \"message\": \"\346\234\215\345\212\241\347\253\257\350\277\224\345\233\236\346\225\260\346\215\256\345\274\202\345\270\270\"}"
//#define ERROR_ROLLBACK "{\"statusCode\": 304, \"message\": \"网络异常冲正中无法进行交易\"}"
#define ERROR_ROLLBACK "{\"statusCode\": 304, \"message\": \"\u7F51\u7EDC\u5F02\u5E38\u51B2\u6B63\u4E2D\u65E0\u6CD5\u8FDB\u884C\u4EA4\u6613\"}"
//#define ERROR_ROLLBACK "{\"statusCode\": 304, \"message\": \"\u7F51\u7EDC\u5F02\u5E38\u51B2\u6B63\u4E2D\u65E0\u6CD5\u8FDB\u884C\u4EA4\u6613\"}"
#define ERROR_ROLLBACK "{\"statusCode\": 304, \"message\": \"\347\275\221\347\273\234\345\274\202\345\270\270\345\206\262\346\255\243\344\270\255\346\227\240\346\263\225\350\277\233\350\241\214\344\272\244\346\230\223\"}"
//#define ERROR_SIGN "{\"statusCode\": 305, \"message\": \"签名异常请联系IT\"}"
#define ERROR_SIGN "{\"statusCode\": 305, \"message\": \"\u7B7E\u540D\u5F02\u5E38\u8BF7\u8054\u7CFBIT\"}"
//#define ERROR_SIGN "{\"statusCode\": 305, \"message\": \"\u7B7E\u540D\u5F02\u5E38\u8BF7\u8054\u7CFBIT\"}"
#define ERROR_SIGN "{\"statusCode\": 305, \"message\": \"\347\255\276\345\220\215\345\274\202\345\270\270\350\257\267\350\201\224\347\263\273\"}"
//#define ERROR_NETWORK "{\"statusCode\": 306, \"message\": \"网络异常连接支付网关失败\"}"
#define ERROR_NETWORK "{\"statusCode\": 306, \"message\": \"\u7F51\u7EDC\u5F02\u5E38\u8FDE\u63A5\u652F\u4ED8\u7F51\u5173\u5931\u8D25\"}"
//#define ERROR_NETWORK "{\"statusCode\": 306, \"message\": \"\u7F51\u7EDC\u5F02\u5E38\u8FDE\u63A5\u652F\u4ED8\u7F51\u5173\u5931\u8D25\"}"
#define ERROR_NETWORK "{\"statusCode\": 306, \"message\": \"\347\275\221\347\273\234\345\274\202\345\270\270\350\277\236\346\216\245\346\224\257\344\273\230\347\275\221\345\205\263\345\244\261\350\264\245\"}"
//#define ERROR_CRET "{\"statusCode\": 307, \"message\": \"证书加载失败无法进行交易\"}"
#define ERROR_CRET "{\"statusCode\": 307, \"message\": \"\u8BC1\u4E66\u52A0\u8F7D\u5931\u8D25\u65E0\u6CD5\u8FDB\u884C\u4EA4\u6613\"}"
//#define ERROR_CRET "{\"statusCode\": 307, \"message\": \"\u8BC1\u4E66\u52A0\u8F7D\u5931\u8D25\u65E0\u6CD5\u8FDB\u884C\u4EA4\u6613\"}"
#define ERROR_CRET "{\"statusCode\": 307, \"message\": \"\350\257\201\344\271\246\345\212\240\350\275\275\345\244\261\350\264\245\346\227\240\346\263\225\350\277\233\350\241\214\344\272\244\346\230\223\"}"
#endif
\ No newline at end of file
......@@ -9,8 +9,9 @@
#define MAX_SIGN_LEN 256
#define CFG_FILE_NAME "fmclient.cfg"
#define RBG_FILE_NAME "fmclient.rbk"
#define REQUEST_CRET "{\r\n \"ver\": 1,\r\n \"reqType\": 99,\r\n \"partnerId\":1443,\r\n \"storeId\":\"%s\",\r\n \"stationId\": \"%s\",\r\n \"serverPublicKey\": \"%s\",\r\n \"clientPrivateKey\": \"%s\"\r\n}"
#define DES3_KEY "123456789987654321123456"
#define REQUEST_CRET "{\r\n \"ver\": 1,\r\n \"reqType\": 99,\r\n \"partnerId\":%d,\r\n \"storeId\":\"%s\",\r\n \"stationId\": \"%s\"\r\n}"
#define DES3_KEY "ABCD@#9876DFSAAWKLDEOPDD"
#define CRET_FILE_NAME "client.p12"
#define JSON_KEY_ONLY "partnerOrderId"
#endif
\ No newline at end of file
......@@ -3,6 +3,7 @@
#include <string>
#include <fstream>
#include <io.h>
#include <iomanip>
#include <jansson.h>
#include <jansson_private.h>
......@@ -26,6 +27,7 @@ using std::string;
int CheckRSASign();
int SendMsg(const std::string &text, const string &url, int iscret = 1);
int UTF8ToGBK(unsigned char * lpUTF8Str,unsigned char * lpGBKStr,int nGBKStrLen);
typedef struct
{
......@@ -260,11 +262,12 @@ int InitClient()
return 1;
}
int ProcessPosReqData(const char *indata, int *needrbk)
int ProcessPosReqData(const char *indata, string &in, int *needrbk)
{
int type, rlt = 0;
int type, rlt = 0;
json_t *root, *reqtype;
std::stringstream tmps;
json_t *root, *reqtype, *partnerId, *storeId, *stationId;
json_error_t error;
*needrbk == 0;
......@@ -278,27 +281,66 @@ int ProcessPosReqData(const char *indata, int *needrbk)
return 0;
}
reqtype = json_object_get(root, "reqType");
if (!json_is_integer(reqtype))
partnerId = json_object_get(root, "partnerId");
if (!json_is_integer(partnerId))
{
LOG() << "error: reqtype is not a integer!";
LOG() << "error: partnerId is not a integer!";
rlt = 0;
goto freeJson;
}
tmps << (int)json_integer_value(partnerId);
storeId = json_object_get(root, "storeId");
if (!json_is_string(storeId))
{
LOG() << "error: storeId is not a string or int!";
rlt = 0;
goto freeJson;
}
tmps << string((char *)json_string_value(storeId));
stationId = json_object_get(root, "stationId");
if (!json_is_string(stationId))
{
LOG() << "error: stationId is not a string or int!";
rlt = 0;
goto freeJson;
}
tmps << string((char *)json_string_value(stationId));
time_t tt = time(NULL);
tm *t = localtime(&tt);
tmps << t->tm_year + 1900 << std::setw(2) << std::setfill('0') << t->tm_mon + 1;
tmps << std::setw(2) << std::setfill('0') << t->tm_mday;
tmps << std::setw(2) << std::setfill('0') << t->tm_hour;
tmps << std::setw(2) << std::setfill('0') << t->tm_min;
tmps << std::setw(2) << std::setfill('0') << t->tm_sec;
LOG() << "partnerOrderId code : " << tmps.str();
json_object_set(root, JSON_KEY_ONLY, json_string(tmps.str().c_str()));
in = string(json_dumps(root, JSON_COMPACT | JSON_SORT_KEYS));
reqtype = json_object_get(root, "reqType");
if (!json_is_integer(reqtype))
{
LOG() << "error: reqtype is not a integer!";
rlt = 0;
goto freeJson;
}
type = (int)json_integer_value(reqtype);
if(type == 72 || type == 62 || type == 71)
*needrbk = 1;
rlt = 1;
freeJson:
json_decref(root);
return 1;
return rlt;
}
int GetRealJson(std::string &out, const std::string &in)
......@@ -402,6 +444,7 @@ __declspec(dllexport) int _stdcall GetValue(char *indata, char *outdata)
if(InitClient() == 0)
{
strcpy(outdata, ERROR_CLIENT_CFG);
LOG() << "return json to pos" << outdata;
return 0;
}
......@@ -409,12 +452,14 @@ __declspec(dllexport) int _stdcall GetValue(char *indata, char *outdata)
if(global_info.isrollback != 0)
{
strcpy(outdata, ERROR_ROLLBACK);
LOG() << "return json to pos" << outdata;
return 0;
}
if(global_info.useRSA == 1 && (global_info.serverpublickey.empty() || global_info.localprivatekey.empty()))
{
strcpy(outdata, ERROR_CRET);
LOG() << "return json to pos" << outdata;
return 0;
}
......@@ -429,6 +474,7 @@ __declspec(dllexport) int _stdcall GetValue(char *indata, char *outdata)
if (CheckRBK() == 1)
{
strcpy(outdata, ERROR_ROLLBACK);
LOG() << "return json to pos" << outdata;
return 0;
}
......@@ -436,23 +482,28 @@ __declspec(dllexport) int _stdcall GetValue(char *indata, char *outdata)
if(indata == NULL || outdata == NULL)
{
LOG() << "indata or outdata is null pointer";
strcpy(outdata, ERROR_INDATA);
LOG() << "return json to pos" << outdata;
return 0;
}
LOG() << "get json from pos :" << indata ;
string in(indata, MAX_BUF_LEN);
string tmpin(indata, MAX_BUF_LEN);
string in;
int needrbk = 0;
if(ProcessPosReqData(in.c_str(), &needrbk) != 1)
if(ProcessPosReqData(tmpin.c_str(), in, &needrbk) != 1)
{
strcpy(outdata, ERROR_INDATA);
LOG() << "return error message to pos :" << outdata ;
return 0;
}
LOG() << "add partnerOrderId : " << in;
int ssign = 0;
global_info.error.clear();
global_info.recvbuf.clear();
......@@ -477,6 +528,15 @@ __declspec(dllexport) int _stdcall GetValue(char *indata, char *outdata)
return 0;
}
//unsigned char outtmp[MAX_BUF_LEN] = { 0 };
//unsigned char outgbk[MAX_BUF_LEN] = { 0 };
//strcpy((char *)outtmp, global_info.recvbuf.c_str());
//UTF8ToGBK(outtmp, outgbk, MAX_BUF_LEN - 1000);
//LOG() << "UTF-8 to GBK :" << outgbk;
strcpy(outdata, global_info.recvbuf.c_str());
endflag:
......@@ -518,17 +578,61 @@ int GetRSASign(const string &text, string &sign)
if((len = DataProcess::GetJsonKeyArray(keys, text)) == 0)
return 0;
//for(int j = 0; j < len; j++)
// std::cout << "---:" << j << ";" << keys[j] << std::endl;
DataProcess::SortString(keys, len);
if(DataProcess::GetValueFromJson(keys, len, text, tmps) == 0)
return 0;
LOG() << "sign data : " << tmps;
if(DataProcess::RSASign(tmps.c_str(), tmp, MAX_SIGN_LEN, global_info.localprivatekey.c_str()) == 0)
return 0;
sign = string(tmp);
return 1;
}
int UTF8ToGBK(unsigned char * lpUTF8Str,unsigned char * lpGBKStr,int nGBKStrLen)
{
wchar_t * lpUnicodeStr = NULL;
int nRetLen = 0;
if(!lpUTF8Str) //如果UTF8字符串为NULL则出错退出
return 0;
nRetLen = MultiByteToWideChar(CP_UTF8,0,(char *)lpUTF8Str,-1,NULL,NULL); //获取转换到Unicode编码后所需要的字符空间长度
//lpUnicodeStr = new WCHAR[nRetLen + 1]; //为Unicode字符串空间
lpUnicodeStr = (WCHAR*)malloc( sizeof(WCHAR)*(nRetLen + 1));
nRetLen = MultiByteToWideChar(CP_UTF8,0,(char *)lpUTF8Str,-1,lpUnicodeStr,nRetLen); //转换到Unicode编码
if(!nRetLen) //转换失败则出错退出
return 0;
nRetLen = WideCharToMultiByte(CP_ACP,0,lpUnicodeStr,-1,NULL,NULL,NULL,NULL); //获取转换到GBK编码后所需要的字符空间长度
if(!lpGBKStr) //输出缓冲区为空则返回转换后需要的空间大小
{
if(lpUnicodeStr)
free(lpUnicodeStr);
return nRetLen;
}
if(nGBKStrLen < nRetLen) //如果输出缓冲区长度不够则退出
{
if(lpUnicodeStr)
free(lpUnicodeStr);
return 0;
}
nRetLen = WideCharToMultiByte(CP_ACP,0,lpUnicodeStr,-1,(char *)lpGBKStr,nRetLen,NULL,NULL); //转换到GBK编码
if(lpUnicodeStr)
free(lpUnicodeStr);
return nRetLen;
}
int CheckRSASign()
{
if(global_info.sign.empty())
......@@ -538,6 +642,8 @@ int CheckRSASign()
string tmps;
int len = 0;
LOG() << "get server return sign : " << global_info.sign;
if((len = DataProcess::GetJsonKeyArray(keys, global_info.recvbuf)) == 0)
return 0;
......@@ -546,6 +652,8 @@ int CheckRSASign()
if(DataProcess::GetValueFromJson(keys, len, global_info.recvbuf, tmps) == 0)
return 0;
LOG() << "check sign data : " << tmps;
return DataProcess::RSAVerify(tmps.c_str(), global_info.sign.c_str(), global_info.serverpublickey.c_str());
}
......@@ -612,10 +720,10 @@ int SendMsg(const std::string &text, const string &url, int iscret)
LOG() << "Get RSA Sign failed";
return 0;
}
LOG() << "get sign : " << sign;
headers = curl_slist_append(headers, string("sign:").append(sign).c_str());
headers = curl_slist_append(headers, "Content-Type:text/json");
}
headers = curl_slist_append(headers, "Content-Type:text/json");
}
else
{
......@@ -677,7 +785,7 @@ int CheckCret()
json_error_t error;
char *tmp;
#ifdef FM_TESTS
char testreturn[] = "{\r\n \"ver\": 1,\r\n \"statusCode\": 100,\r\n \"serverPublicKey\": \"HURK/7TakbDFqpYO5FP1L+puEDvAnzhNs1tHuK4ABfxsv/GRNOL9LVo3w08BuzXwRyDzdeOMrkkkimqQ25GTs3WAnyWqcxznwD4LdyAmNEdfFePA1eT+Bn5/BgfpeEuyUDelyPQPonagECQgteBDXeqljRf+3wGrf3BOu9NinqJ3FV2RQrpzQyRR8H6KsbHH0NXv0ziEkhukOPSp2zMgX0/fxaGGi5y6\",\r\n \"clientPrivateKey\": \"VtyoIS+ukDjlAk2O6mMxXwJMECaV3AyQK9FepIpFIV0I/NDZzMzaBmy/8ZE04v0tWjfDTwG7NfBHIPN144yuSSSKapDbkZOzdYCfJapzHOfAPgt3ICY0R18V48DV5P4Gfn8GB+l4S7JQN6XI9A+idqAQJCC14ENd6qWNF/7fAat/cE6702KeoncVXZFCunNDJFHwfoqxscfQ1e/TOISSG6Q49KnbMyBfdr4wu5zv+fJhP0t4WqbQMkkxMmVS/iF6ggSo8B25ktOOwy15xWGx8/DpHdDOwwfiouvpzx7V+vySf+YK2SGIBoDxH6Axcdp2sQHPlL1R6d7t3U/eUZ9uA7DpA7zjeraDRQrtNr/97SyNvqCisfLqTNQsBFHZJ7+lqQ3Dy1JN/vpbmSGSQLU06ZaXEgxRn6WiDwC0OfcwQt7JsOVCIJYHShCTDeL7aDAH6YeFj2x1+P2IcMx/u9tTfd5ptiFi/gE8jS5MAWTPbTf1r2lLRGzk+TxYlHdQpYs4ohZQgtuzEqdt1ERAO6pb6+jaUlSZqhC+3Z1dSe0xVwQk0NN37Ieh8gQpp/RIQq13Oox0o+tt+oWSxAKcQqY5s2n7w0Nal2HEZJtpgcyXG0RWhoqGtWfMM28vWZTmZoDp1QvnPNTsVBNkGdfObCtN7wZVsSSPs4O56dkSsW4uO0xTfQymHLSA8aoRjiWJIKijvLvCcwW8IGuy7i+PnuhhqR5yuRWQq2o6DIjiDUD3N3fYXam3f4opLa1iQBBYurBuOfS7GCqrjfpvtkR0JZNIp9BAw8rLihnO5KSG17c4s2s0f1ZMbNKHUHTOo2Hb70UPVFEXuWFWbtZOtasV4oFhwg==\"\r\n}";
char testreturn[] = "{\r\n \"ver\": 1,\r\n \"partnerId\": 1234,\r\n \"statusCode\": 100,\r\n \"serverPublicKey\": \"HURK/7TakbDFqpYO5FP1L+puEDvAnzhNs1tHuK4ABfxsv/GRNOL9LVo3w08BuzXwRyDzdeOMrkkkimqQ25GTs3WAnyWqcxznwD4LdyAmNEdfFePA1eT+Bn5/BgfpeEuyUDelyPQPonagECQgteBDXeqljRf+3wGrf3BOu9NinqJ3FV2RQrpzQyRR8H6KsbHH0NXv0ziEkhukOPSp2zMgX0/fxaGGi5y6\",\r\n \"clientPrivateKey\": \"VtyoIS+ukDjlAk2O6mMxXwJMECaV3AyQK9FepIpFIV0I/NDZzMzaBmy/8ZE04v0tWjfDTwG7NfBHIPN144yuSSSKapDbkZOzdYCfJapzHOfAPgt3ICY0R18V48DV5P4Gfn8GB+l4S7JQN6XI9A+idqAQJCC14ENd6qWNF/7fAat/cE6702KeoncVXZFCunNDJFHwfoqxscfQ1e/TOISSG6Q49KnbMyBfdr4wu5zv+fJhP0t4WqbQMkkxMmVS/iF6ggSo8B25ktOOwy15xWGx8/DpHdDOwwfiouvpzx7V+vySf+YK2SGIBoDxH6Axcdp2sQHPlL1R6d7t3U/eUZ9uA7DpA7zjeraDRQrtNr/97SyNvqCisfLqTNQsBFHZJ7+lqQ3Dy1JN/vpbmSGSQLU06ZaXEgxRn6WiDwC0OfcwQt7JsOVCIJYHShCTDeL7aDAH6YeFj2x1+P2IcMx/u9tTfd5ptiFi/gE8jS5MAWTPbTf1r2lLRGzk+TxYlHdQpYs4ohZQgtuzEqdt1ERAO6pb6+jaUlSZqhC+3Z1dSe0xVwQk0NN37Ieh8gQpp/RIQq13Oox0o+tt+oWSxAKcQqY5s2n7w0Nal2HEZJtpgcyXG0RWhoqGtWfMM28vWZTmZoDp1QvnPNTsVBNkGdfObCtN7wZVsSSPs4O56dkSsW4uO0xTfQymHLSA8aoRjiWJIKijvLvCcwW8IGuy7i+PnuhhqR5yuRWQq2o6DIjiDUD3N3fYXam3f4opLa1iQBBYurBuOfS7GCqrjfpvtkR0JZNIp9BAw8rLihnO5KSG17c4s2s0f1ZMbNKHUHTOo2Hb70UPVFEXuWFWbtZOtasV4oFhwg==\"\r\n}";
root = json_loads(testreturn, 0, &error);
#else
root = json_loads(outmsg, 0, &error);
......@@ -729,25 +837,27 @@ int CheckCret()
filestm.flush();
filestm.close();
global_info.serverpublickey = string(json_string_value(serverpublickey));
global_info.localprivatekey = string(json_string_value(localprivatekey));
global_info.serverpublickey = string((char *)json_string_value(serverpublickey));
global_info.localprivatekey = string ((char *)json_string_value(localprivatekey));
LOG() << "server public key :" << global_info.serverpublickey;
LOG() << "client private key :" << global_info.localprivatekey;
}
else
{
json_decref(root);
return 0;
}
json_decref(root);
return 1;
}
/******************************************
*GetCret :从签名服务获取证书
*storeID :门店号
*posNo :POS机器编号
******************************************/
*GetCret :从签名服务获取************/
extern "C"
{
__declspec(dllexport) int _stdcall GetRSACret(char *storeID, char *posNo)
__declspec(dllexport) int _stdcall GetRSACret(int partnerId, char *storeID, char *posNo)
{
if(storeID == NULL || posNo == NULL || strlen(storeID) == 0 || strlen(posNo) == 0)
{
......@@ -768,7 +878,7 @@ extern "C"
char request[MAX_BUF_LEN] = { 0 };
sprintf_s(request, MAX_BUF_LEN, REQUEST_CRET, storeID, posNo, global_info.serverpublickey.c_str(), global_info.localprivatekey.c_str());
sprintf_s(request, MAX_BUF_LEN, REQUEST_CRET, partnerId, storeID, posNo);
LOG() << request;
......@@ -780,7 +890,7 @@ extern "C"
char outmsg[MAX_BUF_LEN] = { 0 };
int legth = 0;
if((legth = DataProcess::DES3Encode((const unsigned char *)DES3_KEY, req.c_str(), req.size(), (unsigned char *)outmsg, MAX_BUF_LEN)) == 0)
if((legth = DataProcess::DES3Encode((const unsigned char *)DES3_KEY, req.c_str(), req.length(), (unsigned char *)outmsg, MAX_BUF_LEN)) == 0)
{
LOG() << "3DES encode failed";
return 0;
......@@ -802,6 +912,9 @@ extern "C"
#endif
string tmpstr = global_info.recvbuf.substr(1, global_info.recvbuf.length() - 2);
global_info.recvbuf = tmpstr;
if(CheckCret() == 0)
{
LOG() << "Check Cret failed";
......@@ -837,9 +950,11 @@ void testinitclient()
InitClient();
}
char a[] = "{\"ver\":1,\"reqType\": 62,\"coupon\": \"122222222222\",\"station_id\": \"1\",\"store_id\": \"999999\",\"operator_id\": \"00000002\" }";
//char a[] = "{\"ver\":1,\"partnerId\":1234,\"reqType\": 62,\"coupon\": \"122222222222\",\"stationId\": \"1\",\"storeId\": \"999999\",\"operator_id\": \"00000002\" }";
//char a[] = "{\r\n \"pay_transId\":\"2017052600001162504297\",\r\n \"total_amount\":1,\r\n \"mcoupon_amount\":0,\r\n \"alipay_amount\":1,\r\n \"pay_ebcode\":\"10010\",\r\n \"ver\":1,\r\n \"fmId\":\"SXA1377O27012186844\",\r\n \"pay_date\":\"2017-05-26 17:01:16.004\",\r\n \"statusCode\":100\r\n}";
//char a[] = "{\"businessDate\":\"20170526\",\"code\":\"7310180009462033\",\"operatorId\":\"90001\",\"partnerId\":1443,\"products\":[{\"consume_num\":1,\"discount\":0,\"name\":\"Coffee\",\"number\":0,\"payment\":null,\"pid\":\"3488\",\"price\":3100,\"priceAct\":0,\"salesType\":\"Normal\",\"scope\":null}],\"promotionTag\":null,\"reqType\":72,\"stationId\":\"3\",\"storeId\":\"1713\",\"transAmount\":3100,\"transId\":6460,\"undiscountAmount\":0,\"ver\":1}";
//char a[] = "{\r\n \"ver\": 1,\r\n \"reqType\": 0,\r\n \"partnerId\": 1443,\r\n \"stationId\": \"123123\",\r\n \"storeId\": \"12344\",\r\n \"operatorId\": \"00000002\",\r\n \"code\": \"7320020400887150\"\r\n}";
char a[] = "{\r\n \"businessDate\": \"20170601\",\r\n \"code\": \"7310188850000277\",\r\n \"operatorId\": \"90001\",\r\n \"partnerId\": 1443,\r\n \"partnerOrderId\": \"1443171223323\",\r\n \"products\": [\r\n {\r\n \"consume_num\": 1,\r\n \"discount\": 0,\r\n \"name\": \"Coffee\",\r\n \"number\": 0,\r\n \"payment\": null,\r\n \"pid\": \"3488\",\r\n \"price\": 3100,\r\n \"priceAct\": 0,\r\n \"salesType\": \"Normal\",\r\n \"scope\": null\r\n }\r\n ],\r\n \"promotionTag\": null,\r\n \"reqType\": 72,\r\n \"stationId\": \"9\",\r\n \"storeId\": \"12344\",\r\n \"transAmount\": 29,\r\n \"transId\": 1,\r\n \"undiscountAmount\": 0,\r\n \"ver\": 1\r\n}";
void testCheckRollbackData()
{
InitClient();
......@@ -849,11 +964,11 @@ void testCheckRollbackData()
int main()
{
char storeid[] = "23456";
char storeid[] = "12344";
char posno[] = "01";
//Test_RSASign();
//Test_RSAVerify();
Test_RSASign();
Test_RSAVerify();
//Test_GetPEMKey();
//Test_3DES();
//Test_LOG();
......@@ -866,13 +981,16 @@ int main()
//TestRETDES();
GetRSACret(storeid, posno);
while(1)
{
GetValue(a, b);
GetRSACret(1443, storeid, posno);
//while(1)
//{
GetValue(a, b);
LOG() << b;
}
// LOG() << b;
// Sleep(30*1000);
//}
......
......@@ -4,15 +4,15 @@
using namespace std;
char text[] = "1443|72|1|12344|1";
char texts[] = "1443|72|1|12344|1";
char text[] = "207|1";
char texts[] = "207|1";
unsigned char deskey[] = "123456789012345678901235";
char sign[256] = {0};
char out [1024] = {0};
char private_key[] = "MIICXQIBAAKBgQDK1JuEwMaEetLryK/PxhEd9QdMWllr/MAVNhV4CMboIjQzYg40ZdIU8qp0kaS/Oe06Th8YWi+wPW+vOSSd3J7kq2r23MMULStSyrK/GAyi7tvvpkNmoP2+s9NPoUjzNGqZTVQ3AqktkgTUiQgO5elqnkfXpz7J6OHm1/m0VjOvpwIDAQABAoGAAdQ+/sh6QdGVu1iY9Ue0+c8u3Kpn6ghidw6AzQ9PM+KzE8+Ljz9n0JaLoPd7Q9oy4Ha54w9VJMK5EhxyzxWhPSyNr/pvxXwMZL22NfdS/Xlj5L1zzR3JGybc7qxMk4rBX+/aT5YbNG5m4yN3pZldMjJPFzVtv6q4PYnq/DBNjgECQQDsq5NoLXbVBo+Ba4nVrV1yPKNqrLwWkpGONrmkXh3KljNOIBoODKoRt0IfA/fym0t4qDu3e0qNBj44MlxpxmqnAkEA22V+QgM9QonIAWTNgFVlYE6sPtHDaPf7WLBHfCjYTUbjFTAGQBKI3phGdPAipB/2pNlty9RZeHyvDZNRTSIzAQJAY56tA5LvjCegzDc544l/5hAEMWjYGyBCyHvclIVRQO8MVXxJu1Q1WhOrb2a6PZKEqBsYV9k7vjS8h+ca4yMzzQJBAI5u9qf+mF/BOWKGQc/mINmEWdiyr81O6ROr5czaa4rH0ZcoxXYFUmxIqb0zRRoOUj61lc11f9xz/eWvVWHhKQECQQCyEFGJtqqtZZyVNmpWYtCJqVlGD7I2dD5oCmQehYLs3XtwbMsqlxPkSbN9zyYGjiPtg0xevqazN32+hXAO3mmG";
char public_key[] = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK1JuEwMaEetLryK/PxhEd9QdMWllr/MAVNhV4CMboIjQzYg40ZdIU8qp0kaS/Oe06Th8YWi+wPW+vOSSd3J7kq2r23MMULStSyrK/GAyi7tvvpkNmoP2+s9NPoUjzNGqZTVQ3AqktkgTUiQgO5elqnkfXpz7J6OHm1/m0VjOvpwIDAQAB";
char private_key[] = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALNT2Oh4Yw2ijcEt+rqKAfnsRUqXlqOOFWcBLZw9SZHXbIOjOBgWXmEh2fa5fbP/yJwHfBXPVK4k0lFrXQuEFlcxI2YdAatLsT2BWOGAhJ15KRvN9uJseNXDRqFBjMJQGr4hbmtohowBdzgLU8ztUeO++4SAcqsnCapEsNi/jwbjAgMBAAECgYBV+J2lnYmHUOX6tgtdAKq/4Wi6wP/D+2sBTcxK+graM1ffqBFNYvPuRydSpEzCTZ8kRmZTomkrb5Ww2PLrgXCfn8CEuu+Gs0qOmIKSJrQqxCjAV5LceqlSNRMbUOlfF0iXtaNS1SFYgTROP+TEOpo6uQCr0wosraJ7XSbkN01Z4QJBAO+uVE6PUlFX3wKHcJv8+gVd3MtB2b74isxAGJt26X811mMr9k2d3p9z/KteZnk6ih0nqrTsNUjcrVeZGxt7WlECQQC/iYyuh3QlBqC0eI7TcvzfjeeGBpo6a9vfbTHQ6dcEotmYtJsvU3/ryaFm08GiT4s131D6LBPh4bm7rGWZ1IzzAkBuvkTT+6LUVN6E46GjYXMAUcs32xhKBbrT/vWft4TRs0V4kxJ98Gixkjz3zWlZsDOqnu5gJBfGr7gkFmkQ/KDRAkBPABXVeqsOBoDMTxlh34CrWGVRI3IDfK9QpUIxz/FOyTiEwqFrUL5na1+2AMtR/gsGKljFBt8ggLDR1paFb2S/AkEAoO0Zg2qya2j+ho9/aY6eHCFBE3XNukUZZRO4P7wSEPRECqQ1DhT1r8QsXo6nuXlOf6JHO6gXV2j5XDg4UhcpRA==";
char public_key[] = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzU9joeGMNoo3BLfq6igH57EVKl5ajjhVnAS2cPUmR12yDozgYFl5hIdn2uX2z/8icB3wVz1SuJNJRa10LhBZXMSNmHQGrS7E9gVjhgISdeSkbzfbibHjVw0ahQYzCUBq+IW5raIaMAXc4C1PM7VHjvvuEgHKrJwmqRLDYv48G4wIDAQAB";
RSA * createRSA(unsigned char * key,int publictype)
{
......@@ -74,13 +74,15 @@ void Test_3DES()
{
char tmpout[1024] = {0};
char outs[MAX_BUF_LEN]= {0};
char tmps[] = "gEYXfUox9kFVFu6I3os8LMULhYn85Ou8R4ye05OZmNb2yb71t18S7BILEi1DZQLPzV6F7UQVsWu+FCvkEssVBS8ZElcrKoaq91aovWZOb17itgpCbvsoE0tvfH2OPC+uNDEjW6iX5WoEFQ3aNJ3OOLyapa0tGrir7Gn/BlAoBkeP5OPP/9Yet4uXbJvwZTTpnkS7YLDqbqCvaaobm6u/LagIOsUGud6V4wDG/OwywymyZl0QXY2bUIQF4OHkIvbgr/LYkYS4zU5X5W5WFlH8xwmjhlMTpvlz8L29tPpJi/BkZ5IPriU9js1o+g73zboYkdTJDKZgewSewDFsH++L2GVaoawECajkwCkI1+Hrob/gKJ3FSJgHBvCHpR6+QUhLe2LMV4VsaikxgrRXZnaFXi52xiFHj2bfys2C2y0ybZZiEqJO3aKn8PSXFZCx+PMw3aGBfqJDWGG4RJysfNg7XAwEaKh8UzIQfJxL8ISKePvYvB8QdMJPUzcEqDEn0m6NVS85x3Wi9Go3ttUvhNHXkOISGv2DlWxzfi7dezzA/EP68nOg7RbmtcWWy/KYl/3DPDdmjTWGz80/R6kzlBh1l0KEr8IuCEamt9TSYv3NkDbSYYTbNvKyH7ubElctD9MoKOCavJ2xGW+Evc2BQ0ld1FgqvFzmN9lHxuCOW5bCylU+Hc51Tcvwve5kFZfIU28o0zhACsQlkSXzWf1Px5ThXxCBz0ZDlC7Y2EAPkzfFzFo8c98/w26dvqoLFi0u2VhGFm/iWfe8i+7xXMPJeaZD/2MRY2PXcG4Ym4f8KRQ3uQKdc+cunaLloiUDDrX5aGqJXp7CjlmtuDu8ZSPjQhaBc27KdseUkZ8cPb/LGNoAtEyvkMzoj5/Z65gw+wpivMoFJ+2xot/zg26kvEfwtq99szaZhDIt9EVXzoZ86j2UiKio+zI6A6Ft8++K39XrljZX3+6jIDGfwymcO+v40Vk/icWKueXrmcdb1b/+tcXCVXV1a1Qxt3SRPF8CcjKRSJHI0KsrGQXDdPUjT8I0G3z3yVvRUGBRBtIaJlvLofX/NTGNw7DImwfzdyaKpYx21sxbE/sxESSiQxUn84Pn/Qn1h/mM4K3QNb/sVoCkQhxHs4bRGAQ6HUAR1w6WjtY1N6W1Lsra4RZ0NGyx7Hu/YulIvbYoSEFvH+mlShZ0YFCkx+A9+TpZq+qjXnI/2uzkLwY+iwFmWECn2v2Ev4ITwUZaSnymHgQ4rB+xVfRCKDOiZeknP1yx25TFLnTyxSa/hhaD7NF60xnRkJVBo22dEED1wPvhTiVo3oGYnYSUftTTb6Si4wh35oGlW6DGJUMRAAmmorHgotgodTc9DSF4BAR6Ibqo+QZnnOBnGUUv/f0vm2kUj3gphNr6mlfYz38u2zCH6wMjqJWb/Qb0WT1hS7vFea2yHgiCHlFuBLQtZdnQMomFzqweZnZE65gamJ4hZwBrrTgo+vEC6TIWuA6d4Ev7IUDKNsv5VTAcpO14RVDiMmG3FwUYGKOoVtA0aEdgOOM6";
if(DataProcess::DES3Encode(deskey, text, strlen(text), (unsigned char *)out, 1024) != 0)
printf("edcode base64:%s\r\n", out);
else
printf("encode failed");
//if(DataProcess::DES3Encode(deskey, text, strlen(text), (unsigned char *)out, 1024) != 0)
// printf("edcode base64:%s\r\n", out);
//else
// printf("encode failed");
if(DataProcess::DES3Decode(deskey, out, strlen(out), (unsigned char *)tmpout, 1024) != 0)
if(DataProcess::DES3Decode((const unsigned char *)DES3_KEY, tmps, strlen(tmps), (unsigned char *)outs, MAX_BUF_LEN) != 0)
printf("edcode base64:%s\r\n", tmpout);
else
printf("encode failed");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment