设为首页 加入收藏

TOP

VC++中实现数据加密(一)
2013-02-08 14:26:49 】 浏览:1263
Tags:实现 数据 加密
  为了保证数据的安全性与完整性,常常要对数据进行加密,在数据传输过程进行数据加密可以防止中途非法截获。我们通常称原始数据叫做源文,用约定的加密算法进行加密处理。加密算法的输入是源文与加密键,而输出的则是密文。加密算法可以分为两种,一种是密键加密算法,一种是明键加密法。

  一、密键加密法:

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

  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步的数据处理,每人也可以根据自己的具体情况用别的计算方法替换。

   

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇用VC++编写扫雷游戏 下一篇查找并删除VC生成的临时文件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目