VC++-数据加密

  • 版本:

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日

作者: 阿飞

出处: https://www.cnblogs.com/nxopen2018/>

关于作者:......

如有问题, 可在底部(留言)咨询.

原文地址:https://www.cnblogs.com/nxopen2018/p/14502665.html