zoukankan      html  css  js  c++  java
  • 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/>

    关于作者:......

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

  • 相关阅读:
    CentOS安装gotop
    oracle 非sys用户创建新用户 授权后 plsql看不到视图
    解决Eclipse+ADT连接夜神模拟器失败问题
    Ext JS v2.3.0 Ext.grid.ColumnModel renderer Record 获取列值
    vi常用快捷键汇总
    外键的变种
    完整性约束
    数据类型2
    数据类型
    表的操作
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14502665.html
Copyright © 2011-2022 走看看