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/>

    关于作者:......

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

  • 相关阅读:
    字符串 CSV解析 表格 逗号分隔值 通讯录 电话簿 MD
    Context Application 使用总结 MD
    RxJava RxPermissions 动态权限 简介 原理 案例 MD
    Luban 鲁班 图片压缩 MD
    FileProvider N 7.0 升级 安装APK 选择文件 拍照 临时权限 MD
    组件化 得到 DDComponent JIMU 模块 插件 MD
    gradlew 命令行 build 调试 构建错误 Manifest merger failed MD
    protobuf Protocol Buffers 简介 案例 MD
    ORM数据库框架 SQLite 常用数据库框架比较 MD
    [工具配置]requirejs 多页面,多入口js文件打包总结
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14502665.html
Copyright © 2011-2022 走看看