Bläddra i källkod

V1.0.15
增加当选择使用动态密码时,如果机型的版本小于V8,则将其设为V8
V1.0.14
增加设置动态密码

DFS_Shuo_Chen 1 år sedan
förälder
incheckning
59a097fae4
45 ändrade filer med 623 tillägg och 224 borttagningar
  1. BIN
      TQCFtpTool/Bin/TQCFtpTool.exe
  2. BIN
      TQCFtpTool/TQCFtpTool.v12.suo
  3. 0 1
      TQCFtpTool/TQCFtpTool/Login.cpp
  4. 1 4
      TQCFtpTool/TQCFtpTool/Release/TQCFtpTool.log
  5. BIN
      TQCFtpTool/TQCFtpTool/Release/TQCFtpTool.tlog/CL.read.1.tlog
  6. BIN
      TQCFtpTool/TQCFtpTool/Release/TQCFtpTool.tlog/CL.write.1.tlog
  7. BIN
      TQCFtpTool/TQCFtpTool/Release/TQCFtpTool.tlog/cl.command.1.tlog
  8. BIN
      TQCFtpTool/TQCFtpTool/TQCFtpTool.rc
  9. 107 84
      TQCFtpTool/TQCFtpTool/TQCFtpToolDlg.cpp
  10. 5 3
      TQCFtpTool/TQCFtpTool/TQCFtpToolDlg.h
  11. 3 1
      TQCFtpTool/TQCFtpTool/conn.ini
  12. 178 1
      TQCFtpTool/TQCFtpTool/global.cpp
  13. 8 1
      TQCFtpTool/TQCFtpTool/global.h
  14. BIN
      TQCFtpTool/TQCFtpTool/resource.h
  15. BIN
      TQCFtpTool/安装包/TQC远程升级工具 V1.0.14.rar
  16. BIN
      TQCFtpTool/安装包/TQC远程升级工具 V1.0.15.rar
  17. 7 0
      TQCFtpTool/安装包/版本说明.txt
  18. BIN
      TQCFtpTool_EncryptVersion/Bin/TQCFtpTool.exe
  19. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool.v12.suo
  20. 27 29
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.Build.CppClean.log
  21. 0 7
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.log
  22. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/CL.read.1.tlog
  23. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/CL.write.1.tlog
  24. 1 1
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/TQCFtpTool.lastbuildstate
  25. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/cl.command.1.tlog
  26. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/link.command.1.tlog
  27. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/link.read.1.tlog
  28. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/link.write.1.tlog
  29. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/rc.command.1.tlog
  30. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/rc.read.1.tlog
  31. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/rc.write.1.tlog
  32. 0 0
      TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/unsuccessfulbuild
  33. 2 2
      TQCFtpTool_EncryptVersion/TQCFtpTool/Release/TQCFtpTool.log
  34. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Release/TQCFtpTool.tlog/CL.read.1.tlog
  35. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Release/TQCFtpTool.tlog/CL.write.1.tlog
  36. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/Release/TQCFtpTool.tlog/cl.command.1.tlog
  37. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/TQCFtpTool.rc
  38. 88 85
      TQCFtpTool_EncryptVersion/TQCFtpTool/TQCFtpToolDlg.cpp
  39. 4 3
      TQCFtpTool_EncryptVersion/TQCFtpTool/TQCFtpToolDlg.h
  40. 2 0
      TQCFtpTool_EncryptVersion/TQCFtpTool/conn.ini
  41. 177 1
      TQCFtpTool_EncryptVersion/TQCFtpTool/global.cpp
  42. 9 1
      TQCFtpTool_EncryptVersion/TQCFtpTool/global.h
  43. BIN
      TQCFtpTool_EncryptVersion/TQCFtpTool/resource.h
  44. BIN
      TQCFtpTool_EncryptVersion/安装包/TQC升级工具离线加密版V1.0.2.rar
  45. 4 0
      TQCFtpTool_EncryptVersion/安装包/版本说明.txt

BIN
TQCFtpTool/Bin/TQCFtpTool.exe


BIN
TQCFtpTool/TQCFtpTool.v12.suo


+ 0 - 1
TQCFtpTool/TQCFtpTool/Login.cpp

@@ -462,7 +462,6 @@ void CLogin::OnBnClickedButtonLogin()
 
 
 
-
 	if (bSuccess)
 	{
 		bLogin = TRUE;

+ 1 - 4
TQCFtpTool/TQCFtpTool/Release/TQCFtpTool.log

@@ -1,6 +1,3 @@
-  Login.cpp
-C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afx.h(38): warning C4996: 'MBCS_Support_Deprecated_In_MFC': MBCS support in MFC is deprecated and may be removed in a future version of MFC.
-          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afx.h(33) : see declaration of 'MBCS_Support_Deprecated_In_MFC'
-  Generating code
+  Generating code
   Finished generating code
   TQCFtpTool.vcxproj -> C:\Bitbucket\TQCFtpTool\TQCFtpTool\Bin\TQCFtpTool.exe

BIN
TQCFtpTool/TQCFtpTool/Release/TQCFtpTool.tlog/CL.read.1.tlog


BIN
TQCFtpTool/TQCFtpTool/Release/TQCFtpTool.tlog/CL.write.1.tlog


BIN
TQCFtpTool/TQCFtpTool/Release/TQCFtpTool.tlog/cl.command.1.tlog


BIN
TQCFtpTool/TQCFtpTool/TQCFtpTool.rc


+ 107 - 84
TQCFtpTool/TQCFtpTool/TQCFtpToolDlg.cpp

@@ -43,6 +43,8 @@ using namespace std;
 #define READ_SIZE 8192
 
 
+#define PW_KEY "a116TGb991citscd"
+
 #ifdef _DEBUG
 #define new DEBUG_NEW
 #endif
@@ -87,12 +89,12 @@ void CTQCFtpToolDlg::DoDataExchange(CDataExchange* pDX)
 	DDX_Control(pDX, IDC_IPADDRESS1, m_ip);
 	DDX_Control(pDX, IDC_PORT, m_port);
 	DDX_Control(pDX, IDC_COMBO1, m_type);
-	DDX_Control(pDX, IDC_LIST1, m_List);
 	DDX_Control(pDX, IDC_ACTIVATE_TYPE, m_activate_type);
 	DDX_Control(pDX, IDC_DATETIMEPICKER2, m_activate_date);
 	DDX_Control(pDX, IDC_RESET_TYPE, m_reset_type);
-	DDX_Control(pDX, IDC_DATETIMEPICKER3, m_reset_date);
 	DDX_Control(pDX, IDC_LIST2, m_list_version);
+	DDX_Control(pDX, IDC_CHECK1, CB_UseDynamicPW);
+	DDX_Control(pDX, IDC_EDIT_DynamicPW, ED_DynamicPW);
 }
 
 BEGIN_MESSAGE_MAP(CTQCFtpToolDlg, CDialogEx)
@@ -100,8 +102,6 @@ BEGIN_MESSAGE_MAP(CTQCFtpToolDlg, CDialogEx)
 	ON_WM_QUERYDRAGICON()
 	ON_BN_CLICKED(IDC_CONNECT, &CTQCFtpToolDlg::OnBnClickedConnect)
 	ON_WM_TIMER()
-	ON_BN_CLICKED(IDC_SEND_GZ, &CTQCFtpToolDlg::OnBnClickedSendGz)
-	ON_BN_CLICKED(IDC_SEND_AI, &CTQCFtpToolDlg::OnBnClickedSendAi)
 	ON_CBN_SELCHANGE(IDC_ACTIVATE_TYPE, &CTQCFtpToolDlg::OnCbnSelchangeActivateType)
 	ON_BN_CLICKED(IDC_ACTIVATE, &CTQCFtpToolDlg::OnBnClickedActivate)
 	ON_BN_CLICKED(IDCANCEL, &CTQCFtpToolDlg::OnBnClickedCancel)
@@ -109,10 +109,12 @@ BEGIN_MESSAGE_MAP(CTQCFtpToolDlg, CDialogEx)
 	ON_CBN_SELCHANGE(IDC_RESET_TYPE, &CTQCFtpToolDlg::OnCbnSelchangeResetType)
 	ON_CBN_SELCHANGE(IDC_COMBO1, &CTQCFtpToolDlg::OnCbnSelchangeCombo1)
 	ON_BN_CLICKED(IDC_BUTTON_DOWNLOAD, &CTQCFtpToolDlg::OnBnClickedButtonDownload)
-	ON_BN_CLICKED(IDC_BUTTON1, &CTQCFtpToolDlg::OnBnClickedButton1)
 	ON_BN_CLICKED(IDC_BUTTON2, &CTQCFtpToolDlg::OnBnClickedButton2)
 	ON_WM_CLOSE()
 	ON_WM_DESTROY()
+	ON_EN_CHANGE(IDC_EDIT_DynamicPW, &CTQCFtpToolDlg::OnEnChangeEditDynamicpw)
+//	ON_BN_CLICKED(IDC_CHECK1, &CTQCFtpToolDlg::OnBnClickedCheck1)
+ON_BN_CLICKED(IDC_CHECK1, &CTQCFtpToolDlg::OnBnClickedCheck1)
 END_MESSAGE_MAP()
 
 
@@ -231,7 +233,7 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 		m_type.AddString("V06新版");
 		m_type.AddString("V08");
 		m_type.AddString("V08.080.03-V08.098.04");
-		m_type.AddString("VV08.098.05及以上");
+		m_type.AddString("V08.098.05及以上");
 
 		m_activate_type.AddString("立即激活");
 		m_activate_type.AddString("延迟激活");
@@ -255,7 +257,7 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 	}
 
 
-	CString strv = "V1.0.13";
+	CString strv = "V1.0.15";
 
 	if (g_nLanguageType == 0)
 	{
@@ -280,6 +282,7 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 		GetDlgItem(IDC_STATIC_RESET_TYPE)->SetWindowText("RESET TYPE:");
 		GetDlgItem(IDC_RESET)->SetWindowText("RESET");
 		GetDlgItem(IDCANCEL)->SetWindowText("Exit");
+		GetDlgItem(IDC_CHECK1)->SetWindowText("UseDynamicPassword");
 
 
 
@@ -289,7 +292,7 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 
 
 	m_activate_date.SetFormat("yyyy/MM/dd HH:mm:ss");
-	m_reset_date.SetFormat("yyyy/MM/dd HH:mm:ss");
+
 
 
 
@@ -310,21 +313,10 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 	{
 		m_reset_type.EnableWindow(TRUE);
 
-		if (m_reset_type.GetCurSel() == 0)
-		{
-			m_reset_date.EnableWindow(FALSE);
-		}
-		else 
-		{
-			m_reset_date.EnableWindow(TRUE);
-		}
-
-
 	}
 	else
 	{
-		//m_reset_type.EnableWindow(FALSE);
-		m_reset_date.EnableWindow(FALSE);
+
 	}
 
 
@@ -349,19 +341,29 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 
 	if (m_reset_type.GetCurSel() == 0)
 	{
-		//m_reset_date.EnableWindow(FALSE);
 		GetDlgItem(IDC_RESET)->EnableWindow(FALSE);
 	}
 	else
 	{
-		//m_reset_date.EnableWindow(TRUE);
 		GetDlgItem(IDC_RESET)->EnableWindow(TRUE);
 	}
 
 
+	char enpw[100] = { 0 };
+	GetPrivateProfileStringA("Server", "dynamicpw", "", enpw, 100, "./conn.ini");
+	string pw = DecryptionAES(enpw, PW_KEY);
+	ED_DynamicPW.SetWindowTextA(pw.c_str());
+
+
+
+	int check = GetPrivateProfileInt("Server", "usedynamicpw", 0, "./conn.ini");
+	CB_UseDynamicPW.SetCheck(check);
+	ED_DynamicPW.EnableWindow(CB_UseDynamicPW.GetCheck());
+	m_type.EnableWindow(!CB_UseDynamicPW.GetCheck());
+
+
+
 
-	GetDlgItem(IDC_SEND_GZ)->EnableWindow(FALSE);
-	GetDlgItem(IDC_SEND_AI)->EnableWindow(FALSE);
 	GetDlgItem(IDC_ACTIVATE)->EnableWindow(FALSE);
 
 
@@ -454,30 +456,41 @@ DWORD __stdcall ThreadHandle(LPVOID lparam)
 
 
 
-	if (type == V6_OLD)//V06旧版密码跟V8一样
-	{
-		name = "ColdStart";
-		pw = "TQCtng";
-	}
-	else if (type == V6_NEW)
-	{
-		name = "Engineering";
-		pw = "FixCCR!12345";
-	}
-	else if (type == V8)
-	{
-		name = "ColdStart";
-		pw = "TQCtng";
-	}
-	else if (type == V8_NEW)
+	if (pthis->CB_UseDynamicPW.GetCheck())
 	{
+		CString strpw;
+		pthis->ED_DynamicPW.GetWindowTextA(strpw);
+
 		name = "ColdStart";
-		pw = "FixCCR!12345";
+		pw = strpw;
 	}
-	else if (type == V8_NEW_2)
+	else
 	{
-		name = "ColdStart";
-		pw = "TQCtng.654321";
+		if (type == V6_OLD)
+		{
+			name = "ColdStart";
+			pw = "TQCtng";
+		}
+		else if (type == V6_NEW)
+		{
+			name = "Engineering";
+			pw = "FixCCR!12345";
+		}
+		else if (type == V8)
+		{
+			name = "ColdStart";
+			pw = "TQCtng";
+		}
+		else if (type == V8_NEW)
+		{
+			name = "ColdStart";
+			pw = "FixCCR!12345";
+		}
+		else if (type == V8_NEW_2)
+		{
+			name = "ColdStart";
+			pw = "TQCtng.654321";
+		}
 	}
 
 
@@ -520,8 +533,6 @@ DWORD __stdcall ThreadHandle(LPVOID lparam)
 
 		if (pthis->m_type.GetCurSel() <= V6_NEW)
 		{
-			pthis->GetDlgItem(IDC_SEND_GZ)->EnableWindow(TRUE);
-			pthis->GetDlgItem(IDC_SEND_AI)->EnableWindow(TRUE);
 			pthis->GetDlgItem(IDC_ACTIVATE)->EnableWindow(TRUE);
 		}
 	}
@@ -605,7 +616,7 @@ void  CTQCFtpToolDlg::GetFilesList()
 			// 根据需要保存地址或做其他操作,这里保存的是文件名
 			//fileList.push_back(finder.GetFilePath().operator LPCTSTR());
 			m_listRecordName.AddHead(finder.GetFileName());
-			m_List.AddString(finder.GetFileName());
+
 
 			
 
@@ -956,15 +967,12 @@ void  CTQCFtpToolDlg::GetFilesList()
 		{
 			if (dir == "/home/tqc/Transfer" || dir == "/home/TQC/Transfer" || dir == "/home/tqc/transfer")
 			{
-				GetDlgItem(IDC_SEND_GZ)->EnableWindow(TRUE);
-				GetDlgItem(IDC_SEND_AI)->EnableWindow(TRUE);
 				GetDlgItem(IDC_ACTIVATE)->EnableWindow(TRUE);
 
 			}
 		}
 
 
-		GetDlgItem(IDC_CUR_DIR)->SetWindowText(dir);
 
 		GetFilesList();
 
@@ -979,7 +987,7 @@ void CTQCFtpToolDlg::OnTimer(UINT_PTR nIDEvent)
 {
 	if (nIDEvent == 1)
 	{
-		m_List.ResetContent();
+
 		m_listRecordName.RemoveAll();
 
 		if (m_pFtpConnection)
@@ -1535,8 +1543,6 @@ void CTQCFtpToolDlg::OnBnClickedReset()
 	{
 
 		CString stract;
-		CString time;
-		CString date;
 
 		if (m_reset_type.GetCurSel() == 0)
 		{
@@ -1548,10 +1554,7 @@ void CTQCFtpToolDlg::OnBnClickedReset()
 
 		}
 
-		CString str;
-		m_reset_date.GetWindowText(str);
-		date = str.Mid(0, 10);
-		time = str.Mid(11, 8);
+
 
 		CString xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + CString("\r\n")
 			+ CString("<command name=\"ActivateSwUpdate\">") + "\r\n"
@@ -1675,12 +1678,10 @@ void CTQCFtpToolDlg::OnCbnSelchangeResetType()
 	{
 		GetDlgItem(IDC_RESET)->EnableWindow(FALSE);
 
-		//m_reset_date.EnableWindow(FALSE);
 	}
 	else
 	{
 		GetDlgItem(IDC_RESET)->EnableWindow(TRUE);
-		//m_reset_date.EnableWindow(TRUE);
 	}
 }
 
@@ -1694,24 +1695,9 @@ void CTQCFtpToolDlg::OnCbnSelchangeCombo1()
 	{
 		m_reset_type.EnableWindow(TRUE);
 
-		if (m_reset_type.GetCurSel() == 0)
-		{
-			m_reset_date.EnableWindow(FALSE);
-		}
-		else
-		{
-			m_reset_date.EnableWindow(TRUE);
-		}
-
-
 	}
 	else
 	{
-		//m_reset_type.EnableWindow(FALSE);
-		m_reset_date.EnableWindow(FALSE);
-
-
-
 	}
 
 
@@ -1889,16 +1875,7 @@ void unzip(LPCTSTR szSavePath)
 */
 
 
-void CTQCFtpToolDlg::OnBnClickedButton1()
-{
-	//string str1 = "qwertyuisfdlsajdxcvnkhsakfh1332487";
-	string str1 = "12121";
-	cout << "加密前:" << str1 << endl;
-	string str2 = EncryptionAES(str1);
-	cout << "加密后:" << str2 << endl;
-	string str3 = DecryptionAES(str2);
-	cout << "解密后:" << str3 << endl;
-}
+
 
 
 BOOL CTQCFtpToolDlg::PreTranslateMessage(MSG* pMsg)
@@ -2375,4 +2352,50 @@ void CTQCFtpToolDlg::OnDestroy()
 	
 
 
+}
+
+
+void CTQCFtpToolDlg::OnEnChangeEditDynamicpw()
+{
+	CString strpw;
+	ED_DynamicPW.GetWindowTextA(strpw);
+
+
+	string enpw = EncryptionAES(strpw.GetString(), PW_KEY);
+
+
+	WritePrivateProfileString("Server", "dynamicpw", enpw.c_str(), "./conn.ini");
+
+}
+
+
+//void CTQCFtpToolDlg::OnBnClickedCheck1()
+//{
+//	ED_DynamicPW.EnableWindow(CB_UseDynamicPW.GetCheck());
+//	m_type.EnableWindow(!CB_UseDynamicPW.GetCheck());
+//
+//	WritePrivateProfileString("Server", "usedynamicpw", to_string(CB_UseDynamicPW.GetCheck()).c_str(), "./conn.ini");
+//
+//}
+
+
+void CTQCFtpToolDlg::OnBnClickedCheck1()
+{
+	
+	if (CB_UseDynamicPW.GetCheck())
+	{
+		if (m_type.GetCurSel() < V8)
+		{
+			m_type.SetCurSel(V8);
+		}
+	}
+
+
+	ED_DynamicPW.EnableWindow(CB_UseDynamicPW.GetCheck());
+	m_type.EnableWindow(!CB_UseDynamicPW.GetCheck());
+
+	WritePrivateProfileString("Server", "usedynamicpw", to_string(CB_UseDynamicPW.GetCheck()).c_str(), "./conn.ini");
+
+
+
 }

+ 5 - 3
TQCFtpTool/TQCFtpTool/TQCFtpToolDlg.h

@@ -50,7 +50,6 @@ public:
 
 
 	afx_msg void OnTimer(UINT_PTR nIDEvent);
-	CListBox m_List;
 	afx_msg void OnBnClickedSendGz();
 	afx_msg void OnBnClickedSendAi();
 	CComboBox m_activate_type;
@@ -65,15 +64,18 @@ public:
 
 	void  GetFilesList();
 	CComboBox m_reset_type;
-	CDateTimeCtrl m_reset_date;
 	afx_msg void OnBnClickedReset();
 	afx_msg void OnCbnSelchangeResetType();
 	afx_msg void OnCbnSelchangeCombo1();
 	afx_msg void OnBnClickedButtonDownload();
-	afx_msg void OnBnClickedButton1();
 	virtual BOOL PreTranslateMessage(MSG* pMsg);
 	CListBox m_list_version;
 	afx_msg void OnBnClickedButton2();
 	afx_msg void OnClose();
 	afx_msg void OnDestroy();
+	CButton CB_UseDynamicPW;
+	CEdit ED_DynamicPW;
+	afx_msg void OnEnChangeEditDynamicpw();
+//	afx_msg void OnBnClickedCheck1();
+	afx_msg void OnBnClickedCheck1();
 };

+ 3 - 1
TQCFtpTool/TQCFtpTool/conn.ini

@@ -4,5 +4,7 @@ IP=127.0.0.1
 type=4
 activatetype=0
 resettype=1
+dynamicpw=FmW2VQfi+ckbRBEtZfixgQ==
+usedynamicpw=0
 [Language]
-LanguageType=0
+LanguageType=1

+ 178 - 1
TQCFtpTool/TQCFtpTool/global.cpp

@@ -4,6 +4,7 @@
 
 #include <afx.h>
 #include <afxinet.h>
+#include "AES.h"
 #define RECVPACK_SIZE 2048
 
 
@@ -478,4 +479,180 @@ CString _A2T(LPSTR AnsiString)
 //	//USES_CONVERSION;
 //	strcpy_s(sBuff, CT2A(UnicodeString));
 //	return sBuff;
-//}
+//}
+
+
+const char g_iv[17] = "";//ECB MODE不需要关心chain,可以填空
+string EncryptionAES(const string& strSrc, string key) //AES加密
+{
+	char chkey[17] = { 0 };
+	memcpy(chkey, key.c_str(), 16);
+
+
+	size_t length = strSrc.length();
+	int block_num = length / BLOCK_SIZE + 1;
+	//明文
+	char* szDataIn = new char[block_num * BLOCK_SIZE + 1];
+	memset(szDataIn, 0x00, block_num * BLOCK_SIZE + 1);
+	strcpy(szDataIn, strSrc.c_str());
+
+	//进行PKCS7Padding填充。
+	int k = length % BLOCK_SIZE;
+	int j = length / BLOCK_SIZE;
+	int padding = BLOCK_SIZE - k;
+	for (int i = 0; i < padding; i++)
+	{
+		szDataIn[j * BLOCK_SIZE + k + i] = padding;
+	}
+	szDataIn[block_num * BLOCK_SIZE] = '\0';
+
+	//加密后的密文
+	char *szDataOut = new char[block_num * BLOCK_SIZE + 1];
+	memset(szDataOut, 0, block_num * BLOCK_SIZE + 1);
+
+	//进行进行AES的ECB模式加密
+	AES aes;
+	aes.MakeKey(chkey, g_iv, 16, 16);
+	aes.Encrypt(szDataIn, szDataOut, block_num * BLOCK_SIZE, AES::ECB);
+
+
+
+	string str = base64_encode((unsigned char*)szDataOut,
+		block_num * BLOCK_SIZE);
+
+
+
+	delete[] szDataIn;
+	delete[] szDataOut;
+	return str;
+}
+
+
+
+unsigned char ascii2value(unsigned char c)
+{
+	if ('0' <= c && c <= '9')
+		return c - '0';
+	else if ('a' <= c && c <= 'f')
+		return c - 'a' + 10;
+	else if ('A' <= c && c <= 'F')
+		return c - 'A' + 10;
+	else abort();
+}
+
+
+unsigned char val2char(unsigned char c)
+{
+	if (0 <= c && c <= 9)
+		return c + '0';
+	else if (10 <= c && c <= 15)
+		return c - 10 + 'A';
+	else abort();
+}
+
+
+//把一个HEX串0xXX 0xXX以字符的形式输出
+std::string HexToAscii(char* inBuf, int numBytes) {
+	int len = numBytes << 1;
+	unsigned char cch = 0, lch = 0, uch = 0;
+	std::string str;
+	for (int i = 0; i < numBytes; i += 1)
+	{
+		cch = *inBuf++;
+		uch = val2char((cch & 0xF0) >> 4);
+		lch = val2char(cch & 0x0F);
+		str.push_back(uch);
+		str.push_back(lch);
+	}
+	return str;
+}
+
+//AES加密 输出为其16进制字符串,不转base64
+string EncryptionAES_OutputHex(const string& strSrc, string key)
+{
+	char chkey[17] = { 0 };
+	memcpy(chkey, key.c_str(), 16);
+
+	size_t length = strSrc.length();
+	int block_num = length / BLOCK_SIZE + 1;
+	//明文
+	char* szDataIn = new char[block_num * BLOCK_SIZE + 1];
+	memset(szDataIn, 0x00, block_num * BLOCK_SIZE + 1);
+	strcpy(szDataIn, strSrc.c_str());
+
+	//进行PKCS7Padding填充。
+	int k = length % BLOCK_SIZE;
+	int j = length / BLOCK_SIZE;
+	int padding = BLOCK_SIZE - k;
+	for (int i = 0; i < padding; i++)
+	{
+		szDataIn[j * BLOCK_SIZE + k + i] = padding;
+	}
+	szDataIn[block_num * BLOCK_SIZE] = '\0';
+
+	//加密后的密文
+	char *szDataOut = new char[block_num * BLOCK_SIZE + 1];
+	memset(szDataOut, 0, block_num * BLOCK_SIZE + 1);
+
+	//进行进行AES的ECB模式加密
+	AES aes;
+	aes.MakeKey(chkey, g_iv, 16, 16);
+	aes.Encrypt(szDataIn, szDataOut, block_num * BLOCK_SIZE, AES::ECB);
+
+
+
+	string str = HexToAscii(szDataOut, block_num * BLOCK_SIZE);
+
+
+
+	delete[] szDataIn;
+	delete[] szDataOut;
+	return str;
+}
+
+
+string DecryptionAES(const string& strSrc, string key) //AES解密
+{
+	if (strSrc.empty())
+	{
+		return "";
+	}
+
+	char chkey[17] = { 0 };
+	memcpy(chkey, key.c_str(), 16);
+
+	string strData = base64_decode(strSrc);
+	size_t length = strData.length();
+	//密文
+	char *szDataIn = new char[length + 1];
+	memcpy(szDataIn, strData.c_str(), length + 1);
+	//明文
+	char *szDataOut = new char[length + 1];
+	memcpy(szDataOut, strData.c_str(), length + 1);
+
+	//进行AES的ECB模式解密
+	AES aes;
+	aes.MakeKey(chkey, g_iv, 16, 16);
+	aes.Decrypt(szDataIn, szDataOut, length, AES::ECB);
+
+	//去PKCS7Padding填充
+	if (0x00 < szDataOut[length - 1] <= 0x16)
+	{
+		int tmp = szDataOut[length - 1];
+		for (int i = length - 1; i >= length - tmp; i--)
+		{
+			if (szDataOut[i] != tmp)
+			{
+				memset(szDataOut, 0, length);
+				//cout << "去填充失败!解密出错!!" << endl;
+				break;
+			}
+			else
+				szDataOut[i] = 0;
+		}
+	}
+	string strDest(szDataOut);
+	delete[] szDataIn;
+	delete[] szDataOut;
+	return strDest;
+}

+ 8 - 1
TQCFtpTool/TQCFtpTool/global.h

@@ -3,6 +3,8 @@
 #include <string>
 
 #include <map>
+#include <string>
+using namespace std;
 
 
 extern std::string g_strToken;
@@ -120,4 +122,9 @@ CString _F2T(double flValue, int nDecimal = 2);
 //
 CString _A2T(LPSTR AnsiString);
 //
-//LPCSTR _T2A(LPCTSTR UnicodeString);
+//LPCSTR _T2A(LPCTSTR UnicodeString);
+
+
+string EncryptionAES(const string& strSrc, string key);
+string EncryptionAES_OutputHex(const string& strSrc, string key);
+string DecryptionAES(const string& strSrc, string key);

BIN
TQCFtpTool/TQCFtpTool/resource.h


BIN
TQCFtpTool/安装包/TQC远程升级工具 V1.0.14.rar


BIN
TQCFtpTool/安装包/TQC远程升级工具 V1.0.15.rar


+ 7 - 0
TQCFtpTool/安装包/版本说明.txt

@@ -1,4 +1,11 @@
 
 
+
+V1.0.15
+增加当选择使用动态密码时,如果机型的版本小于V8,则将其设为V8
+
+V1.0.14
+增加设置动态密码
+
 V1.0.13
 增加V08.098.05版本的新密码选项

BIN
TQCFtpTool_EncryptVersion/Bin/TQCFtpTool.exe


BIN
TQCFtpTool_EncryptVersion/TQCFtpTool.v12.suo


+ 27 - 29
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.Build.CppClean.log

@@ -1,29 +1,27 @@
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.pch
-c:\bitbucket\tqcftptool\tqcftptool\debug\vc120.pdb
-c:\bitbucket\tqcftptool\tqcftptool\debug\vc120.idb
-c:\bitbucket\tqcftptool\tqcftptool\debug\stdafx.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\aes.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\downloaddlg.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\global.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\headerctrlex.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\jsoncpp.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\listctrlex.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\listctrlh.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\login.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptooldlg.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\ioapi.obj
-c:\bitbucket\tqcftptool\tqcftptool\debug\unzip.obj
-c:\bitbucket\tqcftptool\bin\tqcftptool.ilk
-c:\bitbucket\tqcftptool\bin\tqcftptool.exe
-c:\bitbucket\tqcftptool\bin\tqcftptool.pdb
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.res
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.tlog\cl.command.1.tlog
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.tlog\cl.read.1.tlog
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.tlog\cl.write.1.tlog
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.tlog\link.command.1.tlog
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.tlog\link.read.1.tlog
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.tlog\link.write.1.tlog
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.tlog\rc.command.1.tlog
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.tlog\rc.read.1.tlog
-c:\bitbucket\tqcftptool\tqcftptool\debug\tqcftptool.tlog\rc.write.1.tlog
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.pch
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\vc120.pdb
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\vc120.idb
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\stdafx.obj
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\aes.obj
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\downloaddlg.obj
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\global.obj
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\headerctrlex.obj
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\jsoncpp.obj
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\listctrlex.obj
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\listctrlh.obj
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\login.obj
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.obj
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptooldlg.obj
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\bin\tqcftptool.ilk
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\bin\tqcftptool.exe
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\bin\tqcftptool.pdb
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.res
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.tlog\cl.command.1.tlog
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.tlog\cl.read.1.tlog
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.tlog\cl.write.1.tlog
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.tlog\link.command.1.tlog
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.tlog\link.read.1.tlog
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.tlog\link.write.1.tlog
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.tlog\rc.command.1.tlog
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.tlog\rc.read.1.tlog
+c:\bitbucket\tqcftptool\tqcftptool_encryptversion\tqcftptool\debug\tqcftptool.tlog\rc.write.1.tlog

+ 0 - 7
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.log

@@ -1,10 +1,3 @@
   TQCFtpToolDlg.cpp
 c:\program files (x86)\microsoft visual studio 12.0\vc\atlmfc\include\afx.h(38): warning C4996: 'MBCS_Support_Deprecated_In_MFC': MBCS support in MFC is deprecated and may be removed in a future version of MFC.
           c:\program files (x86)\microsoft visual studio 12.0\vc\atlmfc\include\afx.h(33) : see declaration of 'MBCS_Support_Deprecated_In_MFC'
-c:\bitbucket\tqcftptool\tqcftptool\tqcftptooldlg.cpp(1843): warning C4804: '<=' : unsafe use of type 'bool' in operation
-c:\bitbucket\tqcftptool\tqcftptool\tqcftptooldlg.cpp(1846): warning C4018: '>=' : signed/unsigned mismatch
-  Login.cpp
-c:\program files (x86)\microsoft visual studio 12.0\vc\atlmfc\include\afx.h(38): warning C4996: 'MBCS_Support_Deprecated_In_MFC': MBCS support in MFC is deprecated and may be removed in a future version of MFC.
-          c:\program files (x86)\microsoft visual studio 12.0\vc\atlmfc\include\afx.h(33) : see declaration of 'MBCS_Support_Deprecated_In_MFC'
-  Generating Code...
-  TQCFtpTool.vcxproj -> C:\Bitbucket\TQCFtpTool\Bin\TQCFtpTool.exe

BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/CL.read.1.tlog


BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/CL.write.1.tlog


+ 1 - 1
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/TQCFtpTool.lastbuildstate

@@ -1,2 +1,2 @@
 #TargetFrameworkVersion=v4.0:PlatformToolSet=v120_xp:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit
-Debug|Win32|C:\Bitbucket\TQCFtpTool\|
+Debug|Win32|C:\Bitbucket\TQCFtpTool\TQCFtpTool_EncryptVersion\|

BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/cl.command.1.tlog


BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/link.command.1.tlog


BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/link.read.1.tlog


BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/link.write.1.tlog


BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/rc.command.1.tlog


BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/rc.read.1.tlog


BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/rc.write.1.tlog


+ 0 - 0
TQCFtpTool_EncryptVersion/TQCFtpTool/Debug/TQCFtpTool.tlog/unsuccessfulbuild


+ 2 - 2
TQCFtpTool_EncryptVersion/TQCFtpTool/Release/TQCFtpTool.log

@@ -1,8 +1,8 @@
   TQCFtpToolDlg.cpp
 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afx.h(38): warning C4996: 'MBCS_Support_Deprecated_In_MFC': MBCS support in MFC is deprecated and may be removed in a future version of MFC.
           C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afx.h(33) : see declaration of 'MBCS_Support_Deprecated_In_MFC'
-TQCFtpToolDlg.cpp(1852): warning C4804: '<=' : unsafe use of type 'bool' in operation
-TQCFtpToolDlg.cpp(1855): warning C4018: '>=' : signed/unsigned mismatch
+TQCFtpToolDlg.cpp(1830): warning C4804: '<=' : unsafe use of type 'bool' in operation
+TQCFtpToolDlg.cpp(1833): warning C4018: '>=' : signed/unsigned mismatch
   Generating code
   Finished generating code
   TQCFtpTool.vcxproj -> C:\Bitbucket\TQCFtpTool\TQCFtpTool_EncryptVersion\Bin\TQCFtpTool.exe

BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Release/TQCFtpTool.tlog/CL.read.1.tlog


BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Release/TQCFtpTool.tlog/CL.write.1.tlog


BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/Release/TQCFtpTool.tlog/cl.command.1.tlog


BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/TQCFtpTool.rc


+ 88 - 85
TQCFtpTool_EncryptVersion/TQCFtpTool/TQCFtpToolDlg.cpp

@@ -42,6 +42,8 @@ using namespace std;
 #define MAX_FILENAME 512
 #define READ_SIZE 8192
 
+#define PW_KEY "a116TGb991citscd"
+
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -87,12 +89,12 @@ void CTQCFtpToolDlg::DoDataExchange(CDataExchange* pDX)
 	DDX_Control(pDX, IDC_IPADDRESS1, m_ip);
 	DDX_Control(pDX, IDC_PORT, m_port);
 	DDX_Control(pDX, IDC_COMBO1, m_type);
-	DDX_Control(pDX, IDC_LIST1, m_List);
 	DDX_Control(pDX, IDC_ACTIVATE_TYPE, m_activate_type);
 	DDX_Control(pDX, IDC_DATETIMEPICKER2, m_activate_date);
 	DDX_Control(pDX, IDC_RESET_TYPE, m_reset_type);
-	DDX_Control(pDX, IDC_DATETIMEPICKER3, m_reset_date);
 	DDX_Control(pDX, IDC_LIST2, m_list_version);
+	DDX_Control(pDX, IDC_CHECK1, CB_UseDynamicPW);
+	DDX_Control(pDX, IDC_EDIT_DynamicPW, ED_DynamicPW);
 }
 
 BEGIN_MESSAGE_MAP(CTQCFtpToolDlg, CDialogEx)
@@ -100,8 +102,6 @@ BEGIN_MESSAGE_MAP(CTQCFtpToolDlg, CDialogEx)
 	ON_WM_QUERYDRAGICON()
 	ON_BN_CLICKED(IDC_CONNECT, &CTQCFtpToolDlg::OnBnClickedConnect)
 	ON_WM_TIMER()
-	ON_BN_CLICKED(IDC_SEND_GZ, &CTQCFtpToolDlg::OnBnClickedSendGz)
-	ON_BN_CLICKED(IDC_SEND_AI, &CTQCFtpToolDlg::OnBnClickedSendAi)
 	ON_CBN_SELCHANGE(IDC_ACTIVATE_TYPE, &CTQCFtpToolDlg::OnCbnSelchangeActivateType)
 	ON_BN_CLICKED(IDC_ACTIVATE, &CTQCFtpToolDlg::OnBnClickedActivate)
 	ON_BN_CLICKED(IDCANCEL, &CTQCFtpToolDlg::OnBnClickedCancel)
@@ -109,10 +109,11 @@ BEGIN_MESSAGE_MAP(CTQCFtpToolDlg, CDialogEx)
 	ON_CBN_SELCHANGE(IDC_RESET_TYPE, &CTQCFtpToolDlg::OnCbnSelchangeResetType)
 	ON_CBN_SELCHANGE(IDC_COMBO1, &CTQCFtpToolDlg::OnCbnSelchangeCombo1)
 	ON_BN_CLICKED(IDC_BUTTON_DOWNLOAD, &CTQCFtpToolDlg::OnBnClickedButtonDownload)
-	ON_BN_CLICKED(IDC_BUTTON1, &CTQCFtpToolDlg::OnBnClickedButton1)
 	ON_BN_CLICKED(IDC_BUTTON2, &CTQCFtpToolDlg::OnBnClickedButton2)
 	ON_WM_CLOSE()
 	ON_WM_DESTROY()
+	ON_EN_CHANGE(IDC_EDIT_DynamicPW, &CTQCFtpToolDlg::OnEnChangeEditDynamicpw)
+	ON_BN_CLICKED(IDC_CHECK1, &CTQCFtpToolDlg::OnBnClickedCheck1)
 END_MESSAGE_MAP()
 
 
@@ -231,7 +232,7 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 		m_type.AddString("V06新版");
 		m_type.AddString("V08");
 		m_type.AddString("V08.080.03-V08.098.04");
-		m_type.AddString("VV08.098.05及以上");
+		m_type.AddString("V08.098.05及以上");
 
 		m_activate_type.AddString("立即激活");
 		m_activate_type.AddString("延迟激活");
@@ -255,7 +256,7 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 	}
 
 
-	CString strv = "V1.0.1";
+	CString strv = "V1.0.2";
 
 	if (g_nLanguageType == 0)
 	{
@@ -280,8 +281,7 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 		GetDlgItem(IDC_STATIC_RESET_TYPE)->SetWindowText("RESET TYPE:");
 		GetDlgItem(IDC_RESET)->SetWindowText("RESET");
 		GetDlgItem(IDCANCEL)->SetWindowText("Exit");
-
-
+		GetDlgItem(IDC_CHECK1)->SetWindowText("UseDynamicPassword");
 
 
 	}
@@ -289,7 +289,6 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 
 
 	m_activate_date.SetFormat("yyyy/MM/dd HH:mm:ss");
-	m_reset_date.SetFormat("yyyy/MM/dd HH:mm:ss");
 
 
 
@@ -309,21 +308,9 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 	if (m_type.GetCurSel() >= V8)
 	{
 		m_reset_type.EnableWindow(TRUE);
-
-		if (m_reset_type.GetCurSel() == 0)
-		{
-			m_reset_date.EnableWindow(FALSE);
-		}
-		else 
-		{
-			m_reset_date.EnableWindow(TRUE);
-		}
-
-
 	}
 	else
 	{
-		m_reset_date.EnableWindow(FALSE);
 	}
 
 
@@ -348,19 +335,27 @@ BOOL CTQCFtpToolDlg::OnInitDialog()
 
 	if (m_reset_type.GetCurSel() == 0)
 	{
-		//m_reset_date.EnableWindow(FALSE);
 		GetDlgItem(IDC_RESET)->EnableWindow(FALSE);
 	}
 	else
 	{
-		//m_reset_date.EnableWindow(TRUE);
 		GetDlgItem(IDC_RESET)->EnableWindow(TRUE);
 	}
 
 
+	char enpw[100] = { 0 };
+	GetPrivateProfileStringA("Server", "dynamicpw", "",enpw,100, "./conn.ini");
+	string pw = DecryptionAES(enpw, PW_KEY);
+	ED_DynamicPW.SetWindowTextA(pw.c_str());
+
+
+
+	int check = GetPrivateProfileInt("Server", "usedynamicpw", 0, "./conn.ini");
+	CB_UseDynamicPW.SetCheck(check);
+	ED_DynamicPW.EnableWindow(CB_UseDynamicPW.GetCheck());
+	m_type.EnableWindow(!CB_UseDynamicPW.GetCheck());
+
 
-	GetDlgItem(IDC_SEND_GZ)->EnableWindow(FALSE);
-	GetDlgItem(IDC_SEND_AI)->EnableWindow(FALSE);
 	GetDlgItem(IDC_ACTIVATE)->EnableWindow(FALSE);
 
 
@@ -481,31 +476,41 @@ DWORD __stdcall ThreadHandle(LPVOID lparam)
 	CString pw = "";
 
 
-
-	if (type == V6_OLD)//V06旧版密码跟V8一样
-	{
-		name = "ColdStart";
-		pw = "TQCtng";
-	}
-	else if (type == V6_NEW)
-	{
-		name = "Engineering";
-		pw = "FixCCR!12345";
-	}
-	else if (type == V8)
-	{
-		name = "ColdStart";
-		pw = "TQCtng";
-	}
-	else if (type == V8_NEW)
+	if (pthis->CB_UseDynamicPW.GetCheck())
 	{
+		CString strpw;
+		pthis->ED_DynamicPW.GetWindowTextA(strpw);
+
 		name = "ColdStart";
-		pw = "FixCCR!12345";
+		pw = strpw;
 	}
-	else if (type == V8_NEW_2)
+	else
 	{
-		name = "ColdStart";
-		pw = "TQCtng.654321";
+		if (type == V6_OLD)
+		{
+			name = "ColdStart";
+			pw = "TQCtng";
+		}
+		else if (type == V6_NEW)
+		{
+			name = "Engineering";
+			pw = "FixCCR!12345";
+		}
+		else if (type == V8)
+		{
+			name = "ColdStart";
+			pw = "TQCtng";
+		}
+		else if (type == V8_NEW)
+		{
+			name = "ColdStart";
+			pw = "FixCCR!12345";
+		}
+		else if (type == V8_NEW_2)
+		{
+			name = "ColdStart";
+			pw = "TQCtng.654321";
+		}
 	}
 
 
@@ -548,8 +553,6 @@ DWORD __stdcall ThreadHandle(LPVOID lparam)
 
 		if (pthis->m_type.GetCurSel() <= V6_NEW)
 		{
-			pthis->GetDlgItem(IDC_SEND_GZ)->EnableWindow(TRUE);
-			pthis->GetDlgItem(IDC_SEND_AI)->EnableWindow(TRUE);
 			pthis->GetDlgItem(IDC_ACTIVATE)->EnableWindow(TRUE);
 		}
 	}
@@ -632,7 +635,6 @@ void  CTQCFtpToolDlg::GetFilesList()
 			// 根据需要保存地址或做其他操作,这里保存的是文件名
 			//fileList.push_back(finder.GetFilePath().operator LPCTSTR());
 			m_listRecordName.AddHead(finder.GetFileName());
-			m_List.AddString(finder.GetFileName());
 
 			
 
@@ -984,15 +986,12 @@ void  CTQCFtpToolDlg::GetFilesList()
 		{
 			if (dir == "/home/tqc/Transfer" || dir == "/home/TQC/Transfer" || dir == "/home/tqc/transfer") 
 			{
-				GetDlgItem(IDC_SEND_GZ)->EnableWindow(TRUE);
-				GetDlgItem(IDC_SEND_AI)->EnableWindow(TRUE);
 				GetDlgItem(IDC_ACTIVATE)->EnableWindow(TRUE);
 
 			}
 		}
 		 
 
-		GetDlgItem(IDC_CUR_DIR)->SetWindowText(dir);
 
 		GetFilesList();
 	
@@ -1007,7 +1006,6 @@ void CTQCFtpToolDlg::OnTimer(UINT_PTR nIDEvent)
 {
 	if (nIDEvent == 1)
 	{
-		m_List.ResetContent();
 		m_listRecordName.RemoveAll();
 
 		if (m_pFtpConnection)
@@ -1594,8 +1592,6 @@ void CTQCFtpToolDlg::OnBnClickedReset()
 	{
 
 		CString stract;
-		CString time;
-		CString date;
 
 		if (m_reset_type.GetCurSel() == 0)
 		{
@@ -1607,10 +1603,7 @@ void CTQCFtpToolDlg::OnBnClickedReset()
 
 		}
 
-		CString str;
-		m_reset_date.GetWindowText(str);
-		date = str.Mid(0, 10);
-		time = str.Mid(11, 8);
+
 
 		CString xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + CString("\r\n")
 			+ CString("<command name=\"ActivateSwUpdate\">") + "\r\n"
@@ -1733,13 +1726,10 @@ void CTQCFtpToolDlg::OnCbnSelchangeResetType()
 	if (m_reset_type.GetCurSel() == 0)
 	{
 		GetDlgItem(IDC_RESET)->EnableWindow(FALSE);
-
-		//m_reset_date.EnableWindow(FALSE);
 	}
 	else
 	{
 		GetDlgItem(IDC_RESET)->EnableWindow(TRUE);
-		//m_reset_date.EnableWindow(TRUE);
 	}
 }
 
@@ -1752,21 +1742,9 @@ void CTQCFtpToolDlg::OnCbnSelchangeCombo1()
 	if (m_type.GetCurSel() >= V8)
 	{
 		m_reset_type.EnableWindow(TRUE);
-
-		if (m_reset_type.GetCurSel() == 0)
-		{
-			m_reset_date.EnableWindow(FALSE);
-		}
-		else
-		{
-			m_reset_date.EnableWindow(TRUE);
-		}
-
-
 	}
 	else
 	{
-		m_reset_date.EnableWindow(FALSE);
 	}
 
 
@@ -1944,16 +1922,6 @@ void unzip(LPCTSTR szSavePath)
 */
 
 
-void CTQCFtpToolDlg::OnBnClickedButton1()
-{
-	//string str1 = "qwertyuisfdlsajdxcvnkhsakfh1332487";
-	string str1 = "12121";
-	cout << "加密前:" << str1 << endl;
-	string str2 = EncryptionAES(str1);
-	cout << "加密后:" << str2 << endl;
-	string str3 = DecryptionAES(str2);
-	cout << "解密后:" << str3 << endl;
-}
 
 
 BOOL CTQCFtpToolDlg::PreTranslateMessage(MSG* pMsg)
@@ -2444,4 +2412,39 @@ void CTQCFtpToolDlg::OnDestroy()
 	
 
 
+}
+
+
+void CTQCFtpToolDlg::OnEnChangeEditDynamicpw()
+{
+	CString strpw;
+	ED_DynamicPW.GetWindowTextA(strpw);
+
+
+	string enpw =  EncryptionAES(strpw.GetString(), PW_KEY);
+
+
+	WritePrivateProfileString("Server", "dynamicpw", enpw.c_str(), "./conn.ini");
+
+
+
+}
+
+
+void CTQCFtpToolDlg::OnBnClickedCheck1()
+{
+	if (CB_UseDynamicPW.GetCheck())
+	{
+		if (m_type.GetCurSel() < V8)
+		{
+			m_type.SetCurSel(V8);
+		}
+	}
+
+
+	ED_DynamicPW.EnableWindow(CB_UseDynamicPW.GetCheck());
+	m_type.EnableWindow(!CB_UseDynamicPW.GetCheck());
+
+	WritePrivateProfileString("Server", "usedynamicpw", to_string(CB_UseDynamicPW.GetCheck()).c_str(), "./conn.ini");
+
 }

+ 4 - 3
TQCFtpTool_EncryptVersion/TQCFtpTool/TQCFtpToolDlg.h

@@ -50,7 +50,6 @@ public:
 
 
 	afx_msg void OnTimer(UINT_PTR nIDEvent);
-	CListBox m_List;
 	afx_msg void OnBnClickedSendGz();
 	afx_msg void OnBnClickedSendAi();
 	CComboBox m_activate_type;
@@ -65,15 +64,17 @@ public:
 
 	void  GetFilesList();
 	CComboBox m_reset_type;
-	CDateTimeCtrl m_reset_date;
 	afx_msg void OnBnClickedReset();
 	afx_msg void OnCbnSelchangeResetType();
 	afx_msg void OnCbnSelchangeCombo1();
 	afx_msg void OnBnClickedButtonDownload();
-	afx_msg void OnBnClickedButton1();
 	virtual BOOL PreTranslateMessage(MSG* pMsg);
 	CListBox m_list_version;
 	afx_msg void OnBnClickedButton2();
 	afx_msg void OnClose();
 	afx_msg void OnDestroy();
+	CButton CB_UseDynamicPW;
+	CEdit ED_DynamicPW;
+	afx_msg void OnEnChangeEditDynamicpw();
+	afx_msg void OnBnClickedCheck1();
 };

+ 2 - 0
TQCFtpTool_EncryptVersion/TQCFtpTool/conn.ini

@@ -4,5 +4,7 @@ IP=127.0.0.1
 type=4
 activatetype=0
 resettype=1
+dynamicpw=7GFS2VIANAzi7RBR3oBEvg==
+usedynamicpw=0
 [Language]
 LanguageType=0

+ 177 - 1
TQCFtpTool_EncryptVersion/TQCFtpTool/global.cpp

@@ -4,6 +4,7 @@
 
 #include <afx.h>
 #include <afxinet.h>
+#include "AES.h"
 #define RECVPACK_SIZE 2048
 
 
@@ -478,4 +479,179 @@ CString _A2T(LPSTR AnsiString)
 //	//USES_CONVERSION;
 //	strcpy_s(sBuff, CT2A(UnicodeString));
 //	return sBuff;
-//}
+//}
+
+const char g_iv[17] = "";//ECB MODE不需要关心chain,可以填空
+string EncryptionAES(const string& strSrc, string key) //AES加密
+{
+	char chkey[17] = { 0 };
+	memcpy(chkey, key.c_str(), 16);
+
+
+	size_t length = strSrc.length();
+	int block_num = length / BLOCK_SIZE + 1;
+	//明文
+	char* szDataIn = new char[block_num * BLOCK_SIZE + 1];
+	memset(szDataIn, 0x00, block_num * BLOCK_SIZE + 1);
+	strcpy(szDataIn, strSrc.c_str());
+
+	//进行PKCS7Padding填充。
+	int k = length % BLOCK_SIZE;
+	int j = length / BLOCK_SIZE;
+	int padding = BLOCK_SIZE - k;
+	for (int i = 0; i < padding; i++)
+	{
+		szDataIn[j * BLOCK_SIZE + k + i] = padding;
+	}
+	szDataIn[block_num * BLOCK_SIZE] = '\0';
+
+	//加密后的密文
+	char *szDataOut = new char[block_num * BLOCK_SIZE + 1];
+	memset(szDataOut, 0, block_num * BLOCK_SIZE + 1);
+
+	//进行进行AES的ECB模式加密
+	AES aes;
+	aes.MakeKey(chkey, g_iv, 16, 16);
+	aes.Encrypt(szDataIn, szDataOut, block_num * BLOCK_SIZE, AES::ECB);
+
+
+
+	string str = base64_encode((unsigned char*)szDataOut,
+		block_num * BLOCK_SIZE);
+
+
+
+	delete[] szDataIn;
+	delete[] szDataOut;
+	return str;
+}
+
+
+
+unsigned char ascii2value(unsigned char c)
+{
+	if ('0' <= c && c <= '9')
+		return c - '0';
+	else if ('a' <= c && c <= 'f')
+		return c - 'a' + 10;
+	else if ('A' <= c && c <= 'F')
+		return c - 'A' + 10;
+	else abort();
+}
+
+
+unsigned char val2char(unsigned char c)
+{
+	if (0 <= c && c <= 9)
+		return c + '0';
+	else if (10 <= c && c <= 15)
+		return c - 10 + 'A';
+	else abort();
+}
+
+
+//把一个HEX串0xXX 0xXX以字符的形式输出
+std::string HexToAscii(char* inBuf, int numBytes) {
+	int len = numBytes << 1;
+	unsigned char cch = 0, lch = 0, uch = 0;
+	std::string str;
+	for (int i = 0; i < numBytes; i += 1)
+	{
+		cch = *inBuf++;
+		uch = val2char((cch & 0xF0) >> 4);
+		lch = val2char(cch & 0x0F);
+		str.push_back(uch);
+		str.push_back(lch);
+	}
+	return str;
+}
+
+//AES加密 输出为其16进制字符串,不转base64
+string EncryptionAES_OutputHex(const string& strSrc, string key)
+{
+	char chkey[17] = { 0 };
+	memcpy(chkey, key.c_str(), 16);
+
+	size_t length = strSrc.length();
+	int block_num = length / BLOCK_SIZE + 1;
+	//明文
+	char* szDataIn = new char[block_num * BLOCK_SIZE + 1];
+	memset(szDataIn, 0x00, block_num * BLOCK_SIZE + 1);
+	strcpy(szDataIn, strSrc.c_str());
+
+	//进行PKCS7Padding填充。
+	int k = length % BLOCK_SIZE;
+	int j = length / BLOCK_SIZE;
+	int padding = BLOCK_SIZE - k;
+	for (int i = 0; i < padding; i++)
+	{
+		szDataIn[j * BLOCK_SIZE + k + i] = padding;
+	}
+	szDataIn[block_num * BLOCK_SIZE] = '\0';
+
+	//加密后的密文
+	char *szDataOut = new char[block_num * BLOCK_SIZE + 1];
+	memset(szDataOut, 0, block_num * BLOCK_SIZE + 1);
+
+	//进行进行AES的ECB模式加密
+	AES aes;
+	aes.MakeKey(chkey, g_iv, 16, 16);
+	aes.Encrypt(szDataIn, szDataOut, block_num * BLOCK_SIZE, AES::ECB);
+
+
+
+	string str = HexToAscii(szDataOut, block_num * BLOCK_SIZE);
+
+
+
+	delete[] szDataIn;
+	delete[] szDataOut;
+	return str;
+}
+
+
+string DecryptionAES(const string& strSrc, string key) //AES解密
+{
+	if (strSrc.empty())
+	{
+		return "";
+	}
+
+	char chkey[17] = { 0 };
+	memcpy(chkey, key.c_str(), 16);
+
+	string strData = base64_decode(strSrc);
+	size_t length = strData.length();
+	//密文
+	char *szDataIn = new char[length + 1];
+	memcpy(szDataIn, strData.c_str(), length + 1);
+	//明文
+	char *szDataOut = new char[length + 1];
+	memcpy(szDataOut, strData.c_str(), length + 1);
+
+	//进行AES的ECB模式解密
+	AES aes;
+	aes.MakeKey(chkey, g_iv, 16, 16);
+	aes.Decrypt(szDataIn, szDataOut, length, AES::ECB);
+
+	//去PKCS7Padding填充
+	if (0x00 < szDataOut[length - 1] <= 0x16)
+	{
+		int tmp = szDataOut[length - 1];
+		for (int i = length - 1; i >= length - tmp; i--)
+		{
+			if (szDataOut[i] != tmp)
+			{
+				memset(szDataOut, 0, length);
+				//cout << "去填充失败!解密出错!!" << endl;
+				break;
+			}
+			else
+				szDataOut[i] = 0;
+		}
+	}
+	string strDest(szDataOut);
+	delete[] szDataIn;
+	delete[] szDataOut;
+	return strDest;
+}

+ 9 - 1
TQCFtpTool_EncryptVersion/TQCFtpTool/global.h

@@ -3,6 +3,8 @@
 #include <string>
 
 #include <map>
+#include <string>
+using namespace std;
 
 
 extern std::string g_strToken;
@@ -120,4 +122,10 @@ CString _F2T(double flValue, int nDecimal = 2);
 //
 CString _A2T(LPSTR AnsiString);
 //
-//LPCSTR _T2A(LPCTSTR UnicodeString);
+//LPCSTR _T2A(LPCTSTR UnicodeString);
+
+
+
+string EncryptionAES(const string& strSrc, string key);
+string EncryptionAES_OutputHex(const string& strSrc, string key);
+string DecryptionAES(const string& strSrc, string key);

BIN
TQCFtpTool_EncryptVersion/TQCFtpTool/resource.h


BIN
TQCFtpTool_EncryptVersion/安装包/TQC升级工具离线加密版V1.0.2.rar


+ 4 - 0
TQCFtpTool_EncryptVersion/安装包/版本说明.txt

@@ -1,4 +1,8 @@
 
 
+V1.0.2
+增加设置动态密码
+(当选择使用动态密码时,如果机型的版本小于V8,则将其设为V8)
+
 V1.0.1
 增加V08.098.05版本的新密码选项