Commit 2bb8ed91 by 李定达

1.修改对称加密算法为AES-CBC模式;2.对应ver升级为版本3

parent d9052968
...@@ -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;
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#define RBG_FILE_NAME "fmclient.rbk" #define RBG_FILE_NAME "fmclient.rbk"
#define DES3_KEY "ABCD@#9876DFSAAWKLDEOPDD" #define DES3_KEY "ABCD@#9876DFSAAWKLDEOPDD"
#define AES_KEY ""
#define AES_KEY_PRT ""
#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"
...@@ -22,6 +24,9 @@ ...@@ -22,6 +24,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"
......
...@@ -57,7 +57,9 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query) ...@@ -57,7 +57,9 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query)
json.insert(JSON_KEY_REQTYPE, 3); json.insert(JSON_KEY_REQTYPE, 3);
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;
......
...@@ -159,11 +159,14 @@ bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata, ...@@ -159,11 +159,14 @@ bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata,
QByteArray array; QByteArray array;
QString path; QString path;
ToolS::GetPath(path); ToolS::GetPath(path);
QString iv = json[JSON_KEY_PARTNERID].toString() + json[JSON_KEY_STOREID].toString() + json[JSON_KEY_STATIONID].toString();
QString url = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_URL).toString(); QString url = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_URL).toString();
QJsonObject tmpjson = json; QJsonObject tmpjson = json;
CretOperate::GetMAC(tmpjson); CretOperate::GetMAC(tmpjson);
CretOperate::GetSign(tmpjson); CretOperate::GetSign(tmpjson, iv);
bool ispay = false; bool ispay = false;
...@@ -336,6 +339,7 @@ bool Control::GetRSA(QString &error) ...@@ -336,6 +339,7 @@ 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, 99); json.insert(JSON_KEY_REQTYPE, 99);
...@@ -343,7 +347,11 @@ bool Control::GetRSA(QString &error) ...@@ -343,7 +347,11 @@ bool Control::GetRSA(QString &error)
json.insert(JSON_KEY_STATIONID, FMTool::GetString(_request.DeviceNo, 6)); json.insert(JSON_KEY_STATIONID, FMTool::GetString(_request.DeviceNo, 6));
json.insert(JSON_KEY_PARTNERID, FMTool::GetString(_request.PlatNo, 4)); json.insert(JSON_KEY_PARTNERID, FMTool::GetString(_request.PlatNo, 4));
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;
...@@ -359,7 +367,7 @@ bool Control::GetRSA(QString &error) ...@@ -359,7 +367,7 @@ bool Control::GetRSA(QString &error)
return false; return false;
} }
if(CretOperate::SetRSACret(array) == 0) if(CretOperate::SetRSACret(array, iv) == 0)
{ {
error = QString::fromLocal8Bit("签名失败,请重新获取签名"); error = QString::fromLocal8Bit("签名失败,请重新获取签名");
return false; return false;
...@@ -461,9 +469,11 @@ void Control::Request(ReqType type, QStringList list) ...@@ -461,9 +469,11 @@ void Control::Request(ReqType type, QStringList list)
ToolS::GetPath(path); ToolS::GetPath(path);
QString url = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_URL).toString(); QString url = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_URL).toString();
QString iv = json[JSON_KEY_PARTNERID].toString() + json[JSON_KEY_STOREID].toString() + json[JSON_KEY_STATIONID].toString();
QJsonObject tmpjson = json; QJsonObject tmpjson = json;
tmpjson.insert(JSON_KEY_REQTYPE, 3); tmpjson.insert(JSON_KEY_REQTYPE, 3);
CretOperate::GetSign(tmpjson); CretOperate::GetSign(tmpjson, iv);
QLOG_INFO() << "send json to payment: " << tmpjson; QLOG_INFO() << "send json to payment: " << tmpjson;
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,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"
......
...@@ -296,11 +296,37 @@ void TestCret() ...@@ -296,11 +296,37 @@ void TestCret()
qDebug() << json; qDebug() << json;
CretOperate::GetSign(json, sign); CretOperate::GetSign(json, sign, QString("1443176071"));
qDebug() << json; qDebug() << json;
} }
void TestAES()
{
unsigned char key[256] = {0};
unsigned char iv1[16] = {0};
unsigned char iv2[16] = {0};
strcpy((char *)key, "freemud-test");
//strcpy((char *)iv, "1438171311438171");
memcpy(iv1, "143817131", 9);
memcpy(iv2, "143817131", 9);
char in[25600] = {0};
char out[25600] = {0};
char outtmp[25600] = {0};
strcpy(in, "123");
DataProcess::AESEncode(key, iv1, (unsigned char *)in, strlen(in), (unsigned char *)out, 25600);
qDebug() << "TestAES" << out;
DataProcess::AESDecode(key, iv2, (unsigned char *)out, strlen(out), (unsigned char *)outtmp, 25600);
qDebug() << "TestAES" << outtmp;
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
...@@ -337,17 +363,19 @@ int main(int argc, char *argv[]) ...@@ -337,17 +363,19 @@ int main(int argc, char *argv[])
// //
//TestDllFmclient(); //TestDllFmclient();
//TestAES();
//pass //pass
TestDataProcess(); //TestDataProcess();
TestCret(); //TestCret();
qDebug() << "1212367123"; qDebug() << "1212367123";
AlipayRequest req; AlipayRequest req;
FMTool::SetString(req.BusinessDay, 8 , QString("20170909")); FMTool::SetString(req.BusinessDay, 8 , QString("20170909"));
FMTool::SetString(req.TransType, 2 , QString("30")); FMTool::SetString(req.TransType, 2 , QString("10"));
FMTool::SetString(req.PlatNo, 4, QString("1443")); FMTool::SetString(req.PlatNo, 4, QString("1443"));
FMTool::SetString(req.TransTime, 6, QString("130301")); FMTool::SetString(req.TransTime, 6, QString("130301"));
FMTool::SetString(req.StoreNo, 20 , QString("17607")); FMTool::SetString(req.StoreNo, 20 , QString("17607"));
...@@ -393,7 +421,7 @@ int main(int argc, char *argv[]) ...@@ -393,7 +421,7 @@ int main(int argc, char *argv[])
Control control; Control control;
rollback.start(); //rollback.start();
//char as[] = "ak10dh171300000000000 *#dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"; //char as[] = "ak10dh171300000000000 *#dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh";
char b[MAX_BUF_LEN] = {0}; char b[MAX_BUF_LEN] = {0};
......
...@@ -15,7 +15,7 @@ include("./DataProcess/DataProcess.pri") ...@@ -15,7 +15,7 @@ include("./DataProcess/DataProcess.pri")
LIBS += -L$$PWD/lib -llibeay32 -lssleay32 LIBS += -L$$PWD/lib -llibeay32 -lssleay32
CONFIG += C++11 SBKDLL CONFIG += C++11
#DEFINES += FM_DEBUG #DEFINES += FM_DEBUG
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.5.1, 2017-09-15T17:36:09. --> <!-- Written by QtCreator 3.5.1, 2017-09-29T17:39:45. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>
...@@ -226,12 +226,14 @@ ...@@ -226,12 +226,14 @@
</valuelist> </valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value> <value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">sbkpay</value>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">自定义执行档</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:D:/gitcode/sbkpay/sbkpay/sbkpay.pro</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">sbkpay.pro</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value> <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value> <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
......
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