- 版本:
VS2012
实例说明:
在一些应用程序或网络程序中,经常会存有一些非常机密的文件或数据,为了防止其他非法用户查阅或盗取这些机密数据,可对其进行加密。运行程序,在“密钥”编辑框中输入密钥,在“待加密的字符串”编辑框中输入要加密的字符串,单击“加密”按钮,密文将显示在“加密后的字符串”编辑框中,如图所示。
- 界面:
- 技术要点:
通过使用GetAt和SetAt函数可以将密文与密钥提取出来的字符组成新的ASCII字符,从而实现加密。下面介绍这两个函数。
GetAt函数:返回字符串内指定的单个字符,语法如下:
TCHAR GetAt( int nIndex ) const;
参数说明:
nIndex:是返回字符在字符串的位置。
返回值:字符串中的单个字符。
SetAt函数:在字符串的指定位置写入单个字符,语法如下:
void SetAt( int nIndex, TCHAR ch );
参数说明:
nIndex:插入字符的位置。
ch:要插入的字符。
- 实现过程:
(1)新建一个基于对话框的应用程序,将窗体标题改为数据加密技术。
(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);//设置字符串 } 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日