Commit 34af0b6b by NitefullWind

1. 整合onedatabase分支 [2c878b37] 代码。

parent cad561ff
#ifndef CRETOPT #ifndef CRETOPT
#define CRETOPT #define CRETOPT
#include "dataprocess.h" #include "dataprocess.h"
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
class CretOperate class CretOperate
{ {
public: public:
static bool GetDES3MAC(QJsonObject &json, QString &mac = QString()) static bool GetDES3MAC(QJsonObject &json, QString iv, QString &mac = QString())
{ {
std::string tmpmac; std::string tmpmac;
...@@ -23,11 +23,24 @@ public: ...@@ -23,11 +23,24 @@ public:
return false; return false;
} }
QLOG_INFO() << tmpmac.data();
char tmpiv[16] = {0};
memcpy(tmpiv, iv.toUtf8().data(), iv.toUtf8().size() > 16 ? 16 : iv.toUtf8().size());
char outmsg[4096] = {0}; char outmsg[4096] = {0};
if(DataProcess::DES3Encode((const unsigned char *)DES3_KEY, tmpmac.data(), strlen(tmpmac.data()), (unsigned char *)outmsg, 4096) == 0) // if(DataProcess::DES3Encode((const unsigned char *)DES3_KEY, tmpmac.data(), strlen(tmpmac.data()), (unsigned char *)outmsg, 4096) == 0)
// {
// QLOG_ERROR() << "DES3 MAC failed";
// return false;
// }
if(DataProcess::AESEncode((const unsigned char *)AES_KEY, (unsigned char *)tmpiv, (const unsigned char *)tmpmac.data(), strlen(tmpmac.data()), (unsigned char *)outmsg, 4096) == 0)
{ {
QLOG_ERROR() << "DES3 MAC failed"; QLOG_ERROR() << "AES MAC failed";
return false; return false;
} }
...@@ -64,11 +77,11 @@ public: ...@@ -64,11 +77,11 @@ public:
return true; return true;
} }
static bool GetSign(QJsonObject &json, QString &sign = QString()) static bool GetSign(QJsonObject &json, QString iv, QString &sign = QString())
{ {
QString serpbk, clipbk; QString serpbk, clipbk;
if(!GetCret(serpbk, clipbk)) if(!GetCret(iv, serpbk, clipbk))
return false; return false;
QStringList list; QStringList list;
...@@ -96,7 +109,7 @@ public: ...@@ -96,7 +109,7 @@ public:
return true; return true;
} }
static bool SetRSACret(QByteArray &des3text) static bool SetRSACret(QByteArray &des3text, QString iv)
{ {
QByteArray array = des3text; QByteArray array = des3text;
...@@ -104,9 +117,21 @@ public: ...@@ -104,9 +117,21 @@ public:
char *buf = (char *)calloc(array.size() + 100, sizeof(char)); char *buf = (char *)calloc(array.size() + 100, sizeof(char));
strcpy(buf, array.data()); strcpy(buf, array.data());
if(DataProcess::DES3Decode((const unsigned char *)DES3_KEY, buf, strlen(buf), (unsigned char *)rps, MAX_BUF_LEN) == 0) // if(DataProcess::DES3Decode((const unsigned char *)DES3_KEY, buf, strlen(buf), (unsigned char *)rps, MAX_BUF_LEN) == 0)
// {
// QLOG_ERROR() << "DES3Decode des3text Failed";
// return false;
// }
char tmpiv[16] = {0};
char tmpiv1[16] = {0};
memcpy(tmpiv, iv.toUtf8().data(), iv.toUtf8().size() > 16 ? 16 : iv.toUtf8().size());
memcpy(tmpiv1, iv.toUtf8().data(), iv.toUtf8().size() > 16 ? 16 : iv.toUtf8().size());
if(DataProcess::AESDecode((const unsigned char *)AES_KEY, (unsigned char *)tmpiv, (const unsigned char *)buf, strlen(buf), (unsigned char *)rps, MAX_BUF_LEN) == 0)
{ {
QLOG_ERROR() << "DES3Decode des3text Failed"; QLOG_ERROR() << "AESDecode AEStext Failed";
return false; return false;
} }
...@@ -114,7 +139,7 @@ public: ...@@ -114,7 +139,7 @@ public:
if( jsonDocument.isNull() ) if( jsonDocument.isNull() )
{ {
QLOG_ERROR() << "DES3Decode not json:" << rps; QLOG_ERROR() << "AESDecode not json:" << rps;
return false; return false;
} }
...@@ -133,9 +158,15 @@ public: ...@@ -133,9 +158,15 @@ public:
char prtrps[MAX_BUF_LEN] = {0}; char prtrps[MAX_BUF_LEN] = {0};
if(DataProcess::DES3Encode((const unsigned char *)DES3_KEY_PRT, data.data(), strlen(data.data()), (unsigned char *)prtrps, MAX_BUF_LEN) == 0) // if(DataProcess::DES3Encode((const unsigned char *)DES3_KEY_PRT, data.data(), strlen(data.data()), (unsigned char *)prtrps, MAX_BUF_LEN) == 0)
// {
// QLOG_ERROR() << "3des private client.p12 file:" << json;
// return false;
// }
if(DataProcess::AESEncode((const unsigned char *)AES_KEY_PRT, (unsigned char *)tmpiv1, (const unsigned char *)data.data(), strlen(data.data()), (unsigned char *)prtrps, MAX_BUF_LEN) == 0)
{ {
QLOG_ERROR() << "3des private client.p12 file:" << json; QLOG_ERROR() << "AES private client.p12 filed:" << json;
return false; return false;
} }
...@@ -165,8 +196,14 @@ public: ...@@ -165,8 +196,14 @@ public:
} }
private: private:
static bool GetCret(QString &serpublickey, QString &cleprivatekey) static bool GetCret(QString iv, QString &serpublickey, QString &cleprivatekey)
{ {
if(iv.isEmpty())
{
QLOG_ERROR() << "AES cbc iv is empty";
return false;
}
char path[MAX_PATH] = { 0 }; char path[MAX_PATH] = { 0 };
ToolS::GetProcPath(path); ToolS::GetProcPath(path);
...@@ -191,9 +228,19 @@ private: ...@@ -191,9 +228,19 @@ private:
strcpy(buf, array.data()); strcpy(buf, array.data());
if(DataProcess::DES3Decode((const unsigned char *)DES3_KEY_PRT, buf, strlen(buf), (unsigned char *)rps, MAX_BUF_LEN) == 0) // if(DataProcess::DES3Decode((const unsigned char *)DES3_KEY_PRT, buf, strlen(buf), (unsigned char *)rps, MAX_BUF_LEN) == 0)
// {
// QLOG_ERROR() << "DES3Decode Client.p12 Failed";
// return false;
// }
char tmpiv[16] = {0};
memcpy(tmpiv, iv.toUtf8().data(), iv.toUtf8().size() > 16 ? 16 : iv.toUtf8().size());
if(DataProcess::AESDecode((const unsigned char *)AES_KEY_PRT, (unsigned char *)tmpiv, (const unsigned char *)buf, strlen(buf), (unsigned char *)rps, MAX_BUF_LEN) == 0)
{ {
QLOG_ERROR() << "DES3Decode Client.p12 Failed"; QLOG_ERROR() << "AESDecode AEStext Failed";
return false; return false;
} }
...@@ -201,7 +248,7 @@ private: ...@@ -201,7 +248,7 @@ private:
if( jsonDocument.isNull() ) if( jsonDocument.isNull() )
{ {
QLOG_ERROR() << "DES3Decode not json:" << rps; QLOG_ERROR() << "AESDecode not json:" << rps;
return false; return false;
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include <string> #include <string>
#include <openssl/evp.h> #include <openssl/evp.h>
#include <openssl/bio.h> #include <openssl/bio.h>
#include <openssl/buffer.h> #include <openssl/buffer.h>
#include <openssl/rsa.h> #include <openssl/rsa.h>
...@@ -189,6 +189,123 @@ public: ...@@ -189,6 +189,123 @@ public:
return 1; return 1;
} }
static int AESDecode(const unsigned char *key, unsigned char *iv,const unsigned char *in, int inlen, unsigned char *out, int outmaxlen)
{
int iOutLen = 0;
int iTmpLen = 0;
int length = 0;
char tmpiv[16] = { 0 };
memcpy(tmpiv, iv, 16);
unsigned char *tmp = (unsigned char *)malloc(outmaxlen * sizeof(unsigned char));
memset(tmp, 0, outmaxlen);
char sha1[32] = { '\0' };
SHA256((const unsigned char *)key, strlen((const char *)key), (unsigned char *)sha1);
qDebug() << sha1;
if((length = debase64((const char *)in, inlen, (char *)tmp, outmaxlen)) == 0)
{
perror("debase64 failed");
return 0;
}
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx);
EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL,(const unsigned char *)sha1, (const unsigned char *)tmpiv);
if(!EVP_DecryptUpdate(&ctx, (unsigned char*)out, &iOutLen, (const unsigned char *)tmp, length))
{
EVP_CIPHER_CTX_cleanup(&ctx);
return 0;
}
if(!EVP_DecryptFinal_ex(&ctx, (unsigned char *)(out + iOutLen), &iTmpLen))
{
EVP_CIPHER_CTX_cleanup(&ctx);
return 0;
}
iOutLen += iTmpLen;
EVP_CIPHER_CTX_cleanup(&ctx);
out[iOutLen] = 0;
return iOutLen;
}
static int AESEncode(const unsigned char *key, unsigned char *iv,const unsigned char *in, int inlen, unsigned char *out, int outmaxlen)
{
int iOutLen = 0;
int iTmpLen = 0;
int len;
char tmpiv[16] = { 0 };
memcpy(tmpiv, iv, 16);
unsigned char *tmp = (unsigned char *)malloc(outmaxlen * sizeof(unsigned char));
memset(tmp, 0, outmaxlen);
EVP_CIPHER_CTX ctx;
char sha1[32] = { '\0' };
SHA256((const unsigned char *)key, strlen((const char *)key), (unsigned char *)sha1);
qDebug() << sha1;
EVP_CIPHER_CTX_init(&ctx);
EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, (const unsigned char *)sha1, (const unsigned char *)tmpiv);
if(!EVP_EncryptUpdate(&ctx, (unsigned char*)tmp, &iOutLen, (const unsigned char *)in, inlen))
{
EVP_CIPHER_CTX_cleanup(&ctx);
return 0;
}
if(!EVP_EncryptFinal_ex(&ctx, (unsigned char *)(tmp + iOutLen), &iTmpLen))
{
EVP_CIPHER_CTX_cleanup(&ctx);
return 0;
}
iOutLen += iTmpLen;
EVP_CIPHER_CTX_cleanup(&ctx);
len = base64((char *)tmp, iOutLen, (char *)out, outmaxlen);
qDebug() << (char *)out;
free(tmp);
return len;
// AES_KEY aes;
// int len = 0;
// char sha1[32] = { '\0' };
// SHA256((const unsigned char *)key, strlen((const char *)key), (unsigned char *)sha1);
// unsigned char *tmp = (unsigned char *)malloc(outmaxlen * sizeof(unsigned char));
// memset(tmp, 0, outmaxlen);
// qDebug() << (char *)key;
// qDebug() << (char *)iv;
// QByteArray array((char *)sha1);
// qDebug() << array.toBase64();
// qDebug() << array.data();
// if(AES_set_encrypt_key((unsigned char *)sha1, 256, &aes) < 0)
// return 0;
// AES_cbc_encrypt(in, tmp, inlen, &aes, iv, AES_ENCRYPT);
// len = base64((char *)tmp, strlen((char *)tmp), (char *)out, outmaxlen);
// free(tmp);
// return len;
}
static int DES3Encode(const unsigned char *key,const char *in, int inlen, unsigned char *out, int outmaxlen) static int DES3Encode(const unsigned char *key,const char *in, int inlen, unsigned char *out, int outmaxlen)
{ {
int iOutLen = 0; int iOutLen = 0;
......
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#define DES3_KEY "ABCD@#9876DFSAAWKLDEOPDD" #define DES3_KEY "ABCD@#9876DFSAAWKLDEOPDD"
//#define DES3_KEY "DDDDEEEE45LPODDCXZZLKDDO" //#define DES3_KEY "DDDDEEEE45LPODDCXZZLKDDO"
#define AES_KEY "ABCD@#9876DFSAAWKLDEOPDD"
#define AES_KEY_PRT "1JG23G12Y12V123G123F1DI1"
#define DES3_KEY_PRT "1JG23G12Y12V123G123F1DI1" #define DES3_KEY_PRT "1JG23G12Y12V123G123F1DI1"
#define CRET_FILE_NAME "client.p12" #define CRET_FILE_NAME "client.p12"
#define JSON_KEY_ONLY "partnerOrderId" #define JSON_KEY_ONLY "partnerOrderId"
...@@ -23,6 +25,9 @@ ...@@ -23,6 +25,9 @@
#define JSON_KEY_SERPBLICKEY "serverPublicKey" #define JSON_KEY_SERPBLICKEY "serverPublicKey"
#define JSON_KEY_CLIENTPRIKEY "clientPrivateKey" #define JSON_KEY_CLIENTPRIKEY "clientPrivateKey"
#define JSON_KEY_REQTYPE "reqType" #define JSON_KEY_REQTYPE "reqType"
#define JSON_KEY_RPARTNERID "partnerId"
#define JSON_KEY_RSTOREID "storeId"
#define JSON_KEY_RSTATIONID "stationId"
#define VALUE_URL "all/url" #define VALUE_URL "all/url"
#define VALUE_URL_CRET "all/creturl" #define VALUE_URL_CRET "all/creturl"
......
...@@ -58,7 +58,9 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query) ...@@ -58,7 +58,9 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query)
json[JSON_KEY_REQTYPE] = 3; json[JSON_KEY_REQTYPE] = 3;
json[JSON_KEY_VER] = DEFAULT_JSON_VER_VALUE; json[JSON_KEY_VER] = DEFAULT_JSON_VER_VALUE;
if(!CretOperate::GetSign(json)) QString iv = json[JSON_KEY_RPARTNERID].toString() + json[JSON_KEY_RSTOREID].toString() + json[JSON_KEY_RSTATIONID].toString();
if(!CretOperate::GetSign(json, iv))
{ {
QLOG_ERROR() << "rollback : " << "get sign error"; QLOG_ERROR() << "rollback : " << "get sign error";
continue; continue;
......
...@@ -187,10 +187,11 @@ void Control::InitModel() ...@@ -187,10 +187,11 @@ void Control::InitModel()
bool Control::SendMessageToServer(const QJsonObject &json, QByteArray &outdata, QString &error) bool Control::SendMessageToServer(const QJsonObject &json, QByteArray &outdata, QString &error)
{ {
QString iv = json[JSON_KEY_PARTNERID].toString() + json[JSON_KEY_STOREID].toString() + json[JSON_KEY_STATIONID].toString();
QJsonObject tmpjson = json; QJsonObject tmpjson = json;
tmpjson[JSON_KEY_VER] = DEFAULT_JSON_VER_VALUE; tmpjson[JSON_KEY_VER] = DEFAULT_JSON_VER_VALUE;
CretOperate::GetMAC(tmpjson); CretOperate::GetMAC(tmpjson);
CretOperate::GetSign(tmpjson); CretOperate::GetSign(tmpjson, iv);
QLOG_INFO() << "send json to server: " << tmpjson; QLOG_INFO() << "send json to server: " << tmpjson;
...@@ -465,6 +466,7 @@ bool Control::SendMessageToSBKAPI(const QJsonObject &json, QByteArray &outdata, ...@@ -465,6 +466,7 @@ bool Control::SendMessageToSBKAPI(const QJsonObject &json, QByteArray &outdata,
bool Control::GetRSA(QString &error) bool Control::GetRSA(QString &error)
{ {
QJsonObject json; QJsonObject json;
QString iv;
json.insert(JSON_KEY_VER, DEFAULT_JSON_VER_VALUE); json.insert(JSON_KEY_VER, DEFAULT_JSON_VER_VALUE);
json.insert(JSON_KEY_REQTYPE, sign); json.insert(JSON_KEY_REQTYPE, sign);
...@@ -472,7 +474,11 @@ bool Control::GetRSA(QString &error) ...@@ -472,7 +474,11 @@ bool Control::GetRSA(QString &error)
json.insert(JSON_KEY_STATIONID, FMTool::GetJsonValue(_posReqJsonObj, JSON_KEY_STATIONID).toString()); json.insert(JSON_KEY_STATIONID, FMTool::GetJsonValue(_posReqJsonObj, JSON_KEY_STATIONID).toString());
json.insert(JSON_KEY_PARTNERID, FMTool::GetJsonValue(_posReqJsonObj, JSON_KEY_PARTNERID).toInt()); json.insert(JSON_KEY_PARTNERID, FMTool::GetJsonValue(_posReqJsonObj, JSON_KEY_PARTNERID).toInt());
CretOperate::GetDES3MAC(json); iv = FMTool::GetString(_request.PlatNo, 4) + FMTool::GetString(_request.StoreNo, 20) + FMTool::GetString(_request.DeviceNo, 6);
QLOG_INFO() << "get iv : " << iv;
CretOperate::GetDES3MAC(json, iv);
QByteArray array; QByteArray array;
QLOG_INFO() << "get mac sign request : " << json; QLOG_INFO() << "get mac sign request : " << json;
...@@ -495,7 +501,7 @@ bool Control::GetRSA(QString &error) ...@@ -495,7 +501,7 @@ bool Control::GetRSA(QString &error)
} }
} }
if(CretOperate::SetRSACret(array) == 0) if(CretOperate::SetRSACret(array, iv) == 0)
{ {
error = QString::fromLocal8Bit("签名失败,请重新获取签名"); error = QString::fromLocal8Bit("签名失败,请重新获取签名");
return false; return false;
...@@ -600,10 +606,12 @@ void Control::Request(ReqType type, QStringList list) ...@@ -600,10 +606,12 @@ void Control::Request(ReqType type, QStringList list)
QByteArray tmparray; QByteArray tmparray;
QString tmperror; QString tmperror;
QString iv = json[JSON_KEY_PARTNERID].toString() + json[JSON_KEY_STOREID].toString() + json[JSON_KEY_STATIONID].toString();
QJsonObject tmpjson = json; QJsonObject tmpjson = json;
tmpjson[JSON_KEY_VER] = DEFAULT_JSON_VER_VALUE; tmpjson[JSON_KEY_VER] = DEFAULT_JSON_VER_VALUE;
tmpjson[JSON_KEY_REQTYPE] = 3; tmpjson[JSON_KEY_REQTYPE] = 3;
CretOperate::GetSign(tmpjson); CretOperate::GetSign(tmpjson, iv);
QLOG_INFO() << "Send reversal json: " << tmpjson; QLOG_INFO() << "Send reversal json: " << tmpjson;
......
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
#define JSON_KEY_BEGINTIME "beginTime" #define JSON_KEY_BEGINTIME "beginTime"
#define JSON_KEY_ENDTIME "endTime" #define JSON_KEY_ENDTIME "endTime"
#define DEFAULT_JSON_VER_VALUE 2 #define DEFAULT_JSON_VER_VALUE 3
#define DEFAULT_JSON_PRODUCTS_NORMAL "NORMAL" #define DEFAULT_JSON_PRODUCTS_NORMAL "NORMAL"
#define DEFAULT_JSON_PRODUCTS_FREE "FREE" #define DEFAULT_JSON_PRODUCTS_FREE "FREE"
......
...@@ -194,8 +194,9 @@ void TestSimphony::test_GetSign() ...@@ -194,8 +194,9 @@ void TestSimphony::test_GetSign()
json[JSON_KEY_REQTYPE] = 3; json[JSON_KEY_REQTYPE] = 3;
json[JSON_KEY_VER] = DEFAULT_JSON_VER_VALUE; json[JSON_KEY_VER] = DEFAULT_JSON_VER_VALUE;
QString iv = json[JSON_KEY_RPARTNERID].toString() + json[JSON_KEY_RSTOREID].toString() + json[JSON_KEY_RSTATIONID].toString();
QCOMPARE(CretOperate::GetSign(json), true); QCOMPARE(CretOperate::GetSign(json, iv), true);
} }
void TestSimphony::test_POSRequest_data() void TestSimphony::test_POSRequest_data()
......
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