CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

散分!请求提供des加密算法c++源码

楼主cyblueboy83(爱情白痴—电脑迷)2006-02-08 09:44:43 在 VC/MFC / 基础类 提问

散分!请求提供des算法c++源码  
  或者有其它好的加密算法的源码提供.  
   
  问题点数:100、回复次数:12Top

1 楼bobob(静思)回复于 2006-02-08 09:54:15 得分 10

http://community.csdn.net/Expert/topic/4232/4232783.xml?temp=.1083185Top

2 楼pripor(心欲若止水,落花起涟漪)回复于 2006-02-08 09:55:53 得分 5

加密算法很多哦  
  从micro上面就能下载到  
  或者去http://www.codeproject.comTop

3 楼hdqqq(小西瓜)回复于 2006-02-08 10:01:38 得分 5

crypto51   一个提供源码的加密的库,你可以从网上去下载,里面有desTop

4 楼idAnts(此广告位招租)回复于 2006-02-08 10:02:14 得分 80

//   Des.h:   interface   for   the   CDes   class.  
  ////  
  //////////////////////////////////////////////////////////////////////  
   
  #if   !defined(AFX_DES_H__3F7397C3_6BF7_4F9B_A69F_7CDD6CE760C0__INCLUDED_)  
  #define   AFX_DES_H__3F7397C3_6BF7_4F9B_A69F_7CDD6CE760C0__INCLUDED_  
   
  #if   _MSC_VER   >   1000  
  #pragma   once  
  #endif   //   _MSC_VER   >   1000  
   
  class   CDes      
  {  
  public:  
  CDes();  
  virtual   ~CDes();  
  void   *   DeCode(void   *   pData,int   length,__int64   Key,CFile*   result);  
  BOOL   EnCode(CFile   *pFile,__int64   Key,int   length,void   *pData);  
   
  private:  
  void   MakeSubKeys();  
  void   InitKey();  
  int   LefMove28(int   data,int   bit);  
  __int64   MapData(__int64   data);  
  void   Exchange(int   index);  
   
  __int64   m_key;  
  __int64   K[17];  
  int   C[17];  
  int   D[17];  
  DWORD   L;  
  DWORD   R;  
  __int64   m_Data;  
  __int64   m_Result;  
  void   *pIn;  
  void   *pOut;  
  int   buffer_len;  
  };  
   
  #endif   //   !defined(AFX_DES_H__3F7397C3_6BF7_4F9B_A69F_7CDD6CE760C0__INCLUDED_)Top

5 楼idAnts(此广告位招租)回复于 2006-02-08 10:04:06 得分 0

//   Des.cpp:   implementation   of   the   CDes   class.  
  //Author   :   ZZj 2004.04.06  
  //////////////////////////////////////////////////////////////////////  
   
  #include   "stdafx.h"  
  #include   "TestDES.h"  
  #include   "Des.h"  
   
  #ifdef   _DEBUG  
  #undef   THIS_FILE  
  static   char   THIS_FILE[]=__FILE__;  
  #define   new   DEBUG_NEW  
  #endif  
   
  //////////////////////////////////////////////////////////////////////  
  //   Construction/Destruction  
  //////////////////////////////////////////////////////////////////////  
   
  CDes::CDes()  
  {  
  pIn   =   NULL;  
  pOut   =   NULL;  
  }  
   
  CDes::~CDes()  
  {  
  if(pIn)  
  delete   []   pIn;  
  if(pOut)  
  delete   []   pOut;  
  }  
   
  ////////////////////////////////////////////////////////////////////////  
  //MakeSubKeys()×÷Ó㺲úÉú×ÓÃÜÔ¿  
  ////////////////////////////////////////////////////////////////////////  
  void   CDes::MakeSubKeys()  
  {  
  int   Map[]   =   {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};  
  int   Map2[]   =   {14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,  
  41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32};  
   
  __int64   temp,result;  
   
  //¼ÆËã×Ó16¸öÃÜÔ¿  
  for(int   i   =   1;i<17;i++)  
  {  
  C[i]   =   LefMove28(C[i-1],Map[i-1]); //&cedil;ù&frac34;&Yacute;±í&frac12;&oslash;&ETH;&ETH;28&Icirc;&raquo;&Ecirc;&yacute;×ó&Ograve;&AElig;  
  D[i]   =   LefMove28(D[i-1],Map[i-1]); //&cedil;ù&frac34;&Yacute;±í&frac12;&oslash;&ETH;&ETH;28&Icirc;&raquo;&Ecirc;&yacute;×ó&Ograve;&AElig;  
  K[i]   =   C[i];  
  K[i]   =   (K[i]   <<   28)   +   D[i]; //&Eacute;ú&sup3;&Eacute;×&Oacute;&Atilde;&Uuml;&Ocirc;&iquest;  
  result   =   0;  
  for(int   j   =   0;j<48;j++) //56&Icirc;&raquo;×&Ouml;&Atilde;&Uuml;&Ocirc;&iquest;×&ordf;&Icirc;&ordf;48&Icirc;&raquo;  
  {  
  temp   =   1;  
  temp   =   temp   <<   (Map2[j]   -   1);  
  temp   =   (K[i]   &   temp)?   1:0;  
  temp   =   temp   <<   j;  
  result   =   temp   |   result;  
  }  
  K[i]   =   result;  
  }  
   
  }  
   
  ////////////////////////////////////////////////////////////////////////  
  //InitKey()×÷&Oacute;&Atilde;&pound;&ordm;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&Atilde;&Uuml;&Ocirc;&iquest;  
  ////////////////////////////////////////////////////////////////////////  
  void   CDes::InitKey()  
  {  
  int   Map[]   =   {57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,  
  63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4};  
  __int64   _key   =   0,temp;  
   
  //×&ordf;&raquo;&macr;64&Icirc;&raquo;&Ocirc;&shy;&Ecirc;&frac14;&Atilde;&Uuml;&Ocirc;&iquest;&Icirc;&ordf;56&Icirc;&raquo;  
  for(int   i   =   0;i<56;i++)  
  {  
  temp   =   1;  
  temp   =   temp   <<   (Map[i]   -   1);  
  temp   =   (m_key   &   temp)?1:0;  
  temp   =   temp   <<   i;  
  _key   =   temp   |   _key;  
  }  
   
  //&cedil;ù&frac34;&Yacute;&Atilde;&Uuml;&Ocirc;&iquest;&micro;&Atilde;&micro;&frac12;C0,R0  
  C[0]   =   (int)((_key   &   0x00fffffff0000000)   >>   28);  
  D[0]   =   (int)(_key   &   0x000000000fffffff);  
   
  //&cedil;ù&frac34;&Yacute;C(i),R(i)&micro;&Atilde;&micro;&frac12;16&cedil;&ouml;×&Oacute;&Atilde;&Uuml;&Ocirc;&iquest;  
  MakeSubKeys();  
  }Top

6 楼idAnts(此广告位招租)回复于 2006-02-08 10:05:08 得分 0

////////////////////////////////////////////////////////////////////////  
  //LefMove28()×÷&Oacute;&Atilde;&pound;&ordm;28&Icirc;&raquo;&Ecirc;&yacute;&micro;&Auml;×ó&Ograve;&AElig;&sup2;&Ugrave;×÷  
  //int   data   -----   &sup2;&Ugrave;×÷&Ecirc;&yacute;  
  //int   bit     -----   &Ograve;&AElig;&para;&macr;&micro;&Auml;&Icirc;&raquo;&Ecirc;&yacute;  
  ////////////////////////////////////////////////////////////////////////  
  int   CDes::LefMove28(int   data,int   bit)  
  {  
  int   result   =   data   <<   bit;  
  int   temp   =   result   &   0xf0000000;  
  temp   =   temp   >>   28;  
  result   =   (result   &   0x0fffffff)   |   temp;  
  return   result;  
  }  
   
  ////////////////////////////////////////////////////////////////////////  
  //DeCode()×÷&Oacute;&Atilde;&pound;&ordm;&frac12;&acirc;&Atilde;&Uuml;&sup2;&Ugrave;×÷  
  //void   *   pData --------   &acute;&aelig;·&Aring;&frac12;&acirc;&Atilde;&Uuml;&ordm;ó&micro;&Auml;&Ecirc;&yacute;&frac34;&Yacute;  
  //int   length --------   &ETH;è&Ograve;&ordf;&frac12;&acirc;&Atilde;&Uuml;&micro;&Auml;&Ecirc;&yacute;&frac34;&Yacute;&sup3;¤&para;&Egrave;&pound;&not;&Oacute;&brvbar;&Icirc;&ordf;8&micro;&Auml;&Otilde;&ucirc;&Ecirc;&yacute;±&para;  
  //__int64   Key --------   &frac12;&acirc;&Atilde;&Uuml;&Atilde;&Uuml;&Ocirc;&iquest;  
  //CFile*   pFile --------   &acute;&aelig;·&Aring;&ETH;è&Ograve;&ordf;&frac12;&acirc;&Atilde;&Uuml;&Ecirc;&yacute;&frac34;&Yacute;&micro;&Auml;&Icirc;&Auml;&frac14;&thorn;  
  ////////////////////////////////////////////////////////////////////////  
  void   *   CDes::DeCode(void   *   pData,int   length,__int64   Key,CFile*   pFile)  
  {  
  //IP(IP-1)   ±í   ,   &Otilde;&acirc;&Agrave;&iuml;&Oacute;&Atilde;&micro;&frac12;&micro;&Auml;&Ecirc;&Ccedil;   IP-1   &pound;&not;&frac12;&oslash;&ETH;&ETH;·&acute;&Iuml;ò×&ordf;&raquo;&raquo;  
  int   Map[]   =   {58,50,42,34,26,18,10,2,  
  60,52,44,36,28,20,12,4,  
  62,54,46,38,30,22,14,6,  
  64,56,48,40,32,24,16,8,  
  57,49,41,33,25,17,9,1,  
  59,51,43,35,27,19,11,3,  
  61,53,45,37,29,21,13,5,  
  63,55,47,39,31,23,15,7};  
   
  //&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&Ograve;&raquo;&ETH;&copy;&Ecirc;&yacute;&frac34;&Yacute;   ............  
  int   i;  
  __int64   Temp,result   =   0;  
   
  if(pIn)  
  delete   []   pIn;  
  if(pOut)  
  delete   []   pOut;  
  pIn   =   NULL;  
  pOut   =   NULL;  
   
  m_key   =   Key;  
  for(i   =   0;i<17;i++)  
  {  
  K[i]   =   0;  
  C[i]   =   0;  
  D[i]   =   0;  
  }  
  //&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&Atilde;&Uuml;&Ocirc;&iquest;  
  InitKey();  
   
  //&Eacute;ê&Ccedil;&euml;&Auml;&Uacute;&acute;&aelig;  
  if(length%8)  
  buffer_len   =   (length/8   +   1)   *   8;  
  else  
  buffer_len   =   length;  
  pIn   =   new   char   [buffer_len];  
  if(!pIn)  
  {  
  return   FALSE;  
  }  
  pOut   =   new   char   [buffer_len];  
  if(!pOut)  
  {  
  delete   []   pIn;  
  return   FALSE;  
  }  
  memset(pIn,0,buffer_len);  
  memset(pOut,0,buffer_len);  
  __int64   *pDataIn   =   (__int64   *)pIn;  
  __int64   *pDataOut   =   (__int64   *)pOut;  
  pFile->Read(pIn,length);  
   
  for(int   j   =   0;j<buffer_len;)  
  {  
  m_Data   =   *pDataIn;  
  //IP   &sup2;&Ugrave;×÷&pound;&not;&cedil;ù&frac34;&Yacute;×&ordf;&raquo;&macr;±í×&ordf;&raquo;&raquo;&Ecirc;&yacute;&frac34;&Yacute;  
  MapData(m_Data);  
   
  //&frac12;&oslash;&ETH;&ETH;16&acute;&Icirc;&micro;ü&acute;ú&sup2;&Ugrave;×÷  
  for(i   =   1;i<17;i++)  
  Exchange(17   -   i);  
  m_Result   =   R;  
  m_Result   =   (m_Result   <<   32)   +   L;  
  result   =   0;  
  //   IP-1   &sup2;&Ugrave;×÷&pound;&not;&cedil;ù&frac34;&Yacute;×&ordf;&raquo;&raquo;±í&frac12;&oslash;&ETH;&ETH;&Auml;&aelig;&Iuml;ò×&ordf;&raquo;&raquo;  
  for(i   =   0;i<64;i++)  
  {  
  Temp   =   m_Result   >>   i;  
  Temp   =   Temp   &   0x01;  
  result   =   (Temp   <<   (Map[i]-1))   |   result;  
  }  
  //&micro;&Atilde;&micro;&frac12;&Ecirc;&yacute;&frac34;&Yacute;&pound;&not;&frac12;&oslash;&ETH;&ETH;&Iuml;&Acirc;&Ograve;&raquo;&cedil;&ouml;&Ecirc;&yacute;&frac34;&Yacute;&frac14;&Oacute;&Atilde;&Uuml;  
  m_Result   =   result;  
  *pDataOut   =   m_Result;  
  j   +=   sizeof(__int64);  
  pDataIn++;  
  pDataOut++;  
  }  
  // pFile->Seek(-length,CFile::current);  
  // pFile->Write(pOut,buffer_len);  
   
  //&Euml;&Iacute;&raquo;&Oslash;&raquo;&ordm;&sup3;&aring;&Ccedil;&oslash;  
  if(pData)  
  memcpy(pData,pOut,length); // ...buffer_len   >=   length,maybe   overflow.....  
  // memcpy(pData,pOut,buffer_len);  
   
  delete   []   pIn;  
  delete   []   pOut;  
  pIn   =   NULL;  
  pOut   =   NULL;  
   
  return   pData;  
  }  
   
   
  //////////////////未完!!!待续!!!Top

7 楼cyblueboy83(爱情白痴—电脑迷)回复于 2006-02-08 11:01:46 得分 0

idAnts(Coil   &   Nova   Since   1985)  
   
  是否能把源代码直接发给我啦,不想浪费你太多时间在这里贴.  
  我的邮箱是:blueboy83@126.com.  
   
  先谢了Top

8 楼idAnts(此广告位招租)回复于 2006-02-08 11:12:44 得分 0

发送了,请查收。Top

9 楼cyblueboy83(爱情白痴—电脑迷)回复于 2006-02-08 17:45:13 得分 0

很感谢   idAnts 提供的源码,加密部分初步测试可以实现,但解密部分好象有问题.我贴下我的源码,解出来的文件和原来不一样  
  unsigned   char   digest[16];  //解密  
  CString   path;  
  path   =   "c:\\new.dat";//加密后的文件.  
  DWORD   flen;  
  CFile   *file;  
  file   =   new   CFile;  
  if   (   !file->Open(path,   CFile::shareDenyNone|CFile::modeReadWrite))  
  {  
  return;  
  }  
  flen   =   file->GetLength();  
  data   =   new   unsigned   char[(int)flen];  
   
  INT64   sKey;  
  sKey   =   123;   //密码  
   
  CDes     de;  
  //de.EnCode(file,sKey,flen,data);  
  de.DeCode(data,flen,sKey,file);  
  FILE*   fWrite   =   _tfopen(_T("C:\\decode1.dat"),   _T("wb")); //解密后的文件  
   
  fwrite(data,   flen,   sizeof(unsigned   char),   fWrite);  
  fclose(fWrite);Top

10 楼boluoCTO(菠萝项目经理)回复于 2006-02-08 17:58:01 得分 0

http://www.vckbase.com/document/viewdoc/?id=623  
  http://www.vckbase.com/document/viewdoc/?id=352  
  http://www.vckbase.com/code/findcode.asp?keyword=desTop

11 楼cyblueboy83(爱情白痴—电脑迷)回复于 2006-02-08 19:14:07 得分 0

问题基本解决了,刚刚是我自己太心急没做好,感谢大家,特别感谢idAnts(Coil   &   Nova   Since   1985)    
   先回去吃饭了,明天回来揭贴  
  Top

12 楼idAnts(此广告位招租)回复于 2006-02-08 19:27:07 得分 0

哦,你需要改动这个解密的接口DeCode,因为当初为了同事的需要,代码是从一个文件当前给定的位置读出指定长度数据,解密后再写回该文件中.代码中写回的部分让我注释掉了。  
  // pFile->Seek(-length,CFile::current);  
  // pFile->Write(pOut,buffer_len);  
   
  或者是你把下面的  
  // memcpy(pData,pOut,buffer_len);  
  注释去掉,那么解密完的数据在返回的pData里.Top

相关问题

  • 请问谁有DES 加密算法 的C语言或C++语言的源码?
  • 谁知道哪有DES加密算法的C++实现代码?
  • 高分求一C加密算法(必须自己用过)
  • *****高分寻求一个MD5加密算法的c源程序******
  • c#自带的3des加密算法,有个参数请教
  • c#的加密算法中密码能有多长?
  • linux c 怎样实现 md5 ,des 加密算法
  • 加密算法!
  • 求一段C++写的DES加密算法的函数或者类
  • 下面这段简单的C加密算法如何在ASP里面实现?

关键词

  • c++
  • 源码
  • 加密算法
  • 解密
  • 文件
  • frac
  • pout
  • pdata
  • cfile
  • cdes

得分解答快速导航

  • 帖主:cyblueboy83
  • bobob
  • pripor
  • hdqqq
  • idAnts

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo