VC++中实现数据加密

为了保证数据的安全性与完整性,常常要对数据进行加密,在数据传输过程进行数据加密可以防止中途非法截获。我们通常称原始数据叫做源文,用约定的加密算法进行加密处理。加密算法的输入是源文与加密键,而输出的则是密文。加密算法可以分为两种,一种是密键加密算法,一种是明键加密法。

一、密键加密法:

加密算法可以公开,但加密键一定要保密。密文对不知道加密键的人来说,是不容易解密的。如下述算法:

A.把源文分成等长的块,每块的长度和加密键的长度相等,对长度不够的块用空格补充;

B.用自己定义的整数代替源文的数据;

C.对加密键也进行数据替换操作;

D.对源文的整数码与加密键相应字符的整数码进行相加,然后对某一整数进行取模操作;

E.将整数码再用相应的字符进行替换,这样就得到了密文。

实现代码如下:

CString CEncryptDlg::Encrypt_Key(CString Source,CString Key)
{
  int iSourceLen,iKeyLen;
  int iCount;
  div_t div_Result;
  char strTarget[255];
  char pKey[255],pSource[255],pMid[255];
  CString strTmp;
  int i,j,n;
  BYTE PWD_key[255];
  j=0;
  for (i=32;i<=126;i++)
  {
    PWD_key[i]=j;
    j++;
  }//取ASCII值在32~126之间的可视字符
  iSourceLen=Source.GetLength();
  iKeyLen=Key.GetLength();
  div_Result=div(iSourceLen,iKeyLen);
  if (div_Result.rem)
    iCount=div_Result.quot+1;
  else
    iCount=div_Result.quot;
  wsprintf(pKey,"%s",m_Key);
  n=0;
  for (i=1;i<=iCount;i++)
  {
    strTmp=Source.Mid((i-1)*iKeyLen,iKeyLen);
    if (strTmp.GetLength()<iKeyLen)
    {
      for (j=1;j<=iKeyLen-strTmp.GetLength();j++)
        strTmp+=" ";
    }
    wsprintf(pSource,"%s",strTmp);
    for (j=1;j<=iKeyLen;j++)
    {
      int k1;
      int k2;
      k1=PWD_key[pKey[j-1]];
      k2=PWD_key[pSource[j-1]];
      int k=k1+k2;
      div_Result=div(k,ENCRYPT_KEY);
      k=div_Result.rem;
      pMid[j-1]=k;
      strTarget[n++]=k;
    }//对源文进行替换加密处理
  }
  for (j=0;j<n;j++)
  {
    strTarget[j]+=32;
    if (strTarget[j]==32) strTarget[j]=''*''; //用“*”替代密文中的空格
  }
  strTarget[n]=''\0'';
  CString strResult;
  strResult.Format("%s",strTarget);
  return(strResult);
}

注:对D步的数据处理,每人也可以根据自己的具体情况用别的计算方法替换。

时间: 2024-11-03 22:02:53

VC++中实现数据加密的相关文章

源码-求教一个vc中float转化的问题!

问题描述 求教一个vc中float转化的问题! 50C buffer[0] = 0xc6;buffer[1] = 0xc3;buffer[2] = 0x90;buffer[3] = 0x30; 哪位大神能给了源码吗,谢谢了!!不会搞,急死了! 解决方案 请教一个VC问题 解决方案二: 数据的在计算机中不是用二进制表示的嘛,4位16进制就需要用32位二进制来表示:然后低字节存地位,高字节存高位,也就是传说中的"小端模式":这个不需要什么源码,理解到了就行:理解不到就去看书 解决方案三:

在VC中使用MATLAB C/C++函数库

MATLAB广泛应用于线性代数.自动控制理论.数理统计.数字信号处理.时间序列分析.动态系统仿真等领域.因此如果在VC中对MATLAB进行调用将大大减少编程的工作量.保证程序的准确性,并且继承了VC++强大的功能,提高开发效率,本文将介绍了在VC中使用MATLAB函数库的具体步骤: 在VC中建立一个项目后: 1.设置: 添加路径: 在project-settings-c/C++-category:-preprocessor-Additional include directories:栏目中添加

VC++中利用MSXML解析XML文档

c++|xml 四.程序实现 下面通过一个具体的实例来说明在VC++中如何利用MSXML解析XML文档. (1)源XML文档(xmlfile.xml)如下: <?xml version="1.0" encoding="GB2312"?> <Device id="10041" name="设备1"> <Type>13</Type> <TypeName>保护</Ty

VC中的图片单击事件Picture Control

VC 中Picture Control 添加图片和单击事件,比C#等语言稍微较麻烦 一.添加图片 1.在窗体添加Picture Control控件 2.代码添加图片 HBITMAP hBmpWSUS = (HBITMAP)LoadImage (AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP_WSUS), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS); // 关联图片ID HBITMAP hBmpVIRUS =

VC中的图象打印问题

我终于完成了对图象的打印操作,在此,将其全部奉上,以满足与我有同样经历的朋友的需要.在这里,我要特别感谢VCKbase中的LiuRong! 另外,由于这是我的第一篇文章 ,难免有不尽人意之处,欢迎大家提出批评和建议,先谢谢啦. VC中的图象打印一般有两种方法: 一.选定打印设备环境后,用DrawState可以将图象打印出来,这可以用于资源中图象 的打印输出,比较简单,不再多说. 二.窗口内容的打印,这是本文的重点,也是我遇到的最大的问题,下面我主要介绍 这种打印: 1.工程简单介绍 建立一个基于

VC++中的自定义消息

在VC++中想加入自定义消息,以下方法可供参考 -- 1 首先定义消息:例如 define WM_MYMESSAGE (WM_USER+100) 2 在.H文件中,加入消息响应函数,如:LONG OnMyMessage(WPARAM w,LPARAM l); 该函数有规定的格式:LONG Function_Name(WPARAM w,LPARAM l); 3 加入消息响应宏 在响应该消息的类中,在消息响应块中, BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{

VC中基于Windows的精确定时

在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等.特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要精确定时操作. 众所周知,Windows 是基于消息机制的系统,任何事件的执行都是通过发送和接收消息来完成的. 这样就带来了一些问题,如一旦计算机的CPU被某个进程占用,或系统资源紧张时,发送到消息队列 中的消息就暂时被挂起,得不到实时处理.因此,不能简单地通过Windows消息引发一个对定时要求

VC++中调用word进行word表格的填写

在实际应用中,编程者往往喜欢程序能自动生成word说明文档,说明程序运 行的状况或运行的结果:或者程序能提取数据库的内容生成word表格,使用户能 方便的查看和修改,打印.但是VC++中调用word的确不容易,特别是对word中各 种函数的使用,本文以作者的工作经验详细介绍一下如何调用word和进行word表 格的填写,有同样需求的编友也可查看一下MSDN中的Automation Microsoft Office 97 and Microsoft office 2000.下面介绍以Microso

在低版本的vc中使用vc 10.0的新特性

/*! 在低版本的vc中使用vc 10.0的新特性 created by : andrew.wu (erpingwu@gmail.com) */ vc 10.0提供了一些新的特性,最引人注目的莫过于lambda, 但vs2010 beta内存占用之多也不得不让人心生退让. 高手 7cat 指出 "vc ide 只是一个壳" 那么如果利用 vc 10.0 编译器的新功能? 以vc9为例, 注意 Tools->Projects and Solutions->VC++ Direc