VS2012
實(shí)例說明: 在一些應(yīng)用程序或網(wǎng)絡(luò)程序中,經(jīng)常會存有一些非常機(jī)密的文件或數(shù)據(jù),為了防止其他非法用戶查閱或盜取這些機(jī)密數(shù)據(jù),可對其進(jìn)行加密。運(yùn)行程序,在“密鑰”編輯框中輸入密鑰,在“待加密的字符串”編輯框中輸入要加密的字符串,單擊“加密”按鈕,密文將顯示在“加密后的字符串”編輯框中,如圖所示。
通過使用GetAt和SetAt函數(shù)可以將密文與密鑰提取出來的字符組成新的ASCII字符,從而實(shí)現(xiàn)加密。下面介紹這兩個函數(shù)。 GetAt函數(shù):返回字符串內(nèi)指定的單個字符,語法如下: TCHAR GetAt( int nIndex ) const; 參數(shù)說明: nIndex:是返回字符在字符串的位置。 返回值:字符串中的單個字符。
SetAt函數(shù):在字符串的指定位置寫入單個字符,語法如下: void SetAt( int nIndex, TCHAR ch ); 參數(shù)說明: nIndex:插入字符的位置。 ch:要插入的字符。
(1)新建一個基于對話框的應(yīng)用程序,將窗體標(biāo)題改為數(shù)據(jù)加密技術(shù)。 (2)在窗體上添加4個文本編輯控件和2個按鈕控件。 (3)加密代碼如下。 /* 加密 */ CString Encrypt(CString S, WORD K) { CString Str,Str1,Result; int i,j; Str = S; for(i=0;i<S.GetLength();i++) { Str.SetAt(i,S.GetAt(i)+K);//獲得字符串 } S = Str; //加密字符串 for(i=0;i<S.GetLength();i++) { j = (BYTE)S.GetAt(i); Str1 = "01"; Str1.SetAt(0,65+j/26); Str1.SetAt(1,65+j%26); Result += Str1; } return Result; }
/* 解密 */ CString Decrypt(CString S, WORD K) { CString Result,Str; int i,j; //解密字符 for (int i=0;i<S.GetLength()/2;i++) { j=((BYTE)S.GetAt(2*i)-65)*26; j+=(BYTE)S.GetAt(2*i+1)-65; Str = "0"; Str.SetAt(0,j); Result += Str; } S = Result; for (int i=0;i<S.GetLength();i++) { Result.SetAt(i, (BYTE)S.GetAt(i)-K);//設(shè)置字符串 } return Result; }
項目源代碼 void CMFCApplication1Dlg::OnBnClickedButtonencryption() { // TODO: 在此添加控件通知處理程序代碼 //獲得輸入的密鑰 CString input1; GetDlgItem(IDC_EDIT_INPUT1)->GetWindowText(input1); //獲得輸入的待加密字符串 CString input2; GetDlgItem(IDC_EDIT_INPUT2)->GetWindowText(input2); //開始加密 WORD K = atoi(input1.GetBuffer()); CString res = Encrypt(input2, K); //將加密后的字符串寫入到輸出對話框 SetDlgItemText(IDC_EDIT_OUTPUT1, res.GetBuffer()); } void CMFCApplication1Dlg::OnBnClickedButtondecode() { // TODO: 在此添加控件通知處理程序代碼 //獲得加密后的字符串 CString output1; GetDlgItem(IDC_EDIT_OUTPUT1)->GetWindowText(output1); //獲得輸入的密鑰 CString input1; GetDlgItem(IDC_EDIT_INPUT1)->GetWindowText(input1); //開始解密 WORD K = atoi(input1.GetBuffer()); CString res = Decrypt(output1, K); //將解密后的字符串寫入到輸出對話框 SetDlgItemText(IDC_EDIT_OUTPUT2, res.GetBuffer()); }
Caesar盧尚宇 2021年3月8日 |
|