[原创]使用 DES算法(包括3DES) 加密解密程序1.2[含源码]

此贴已标记为过时

请阅读最新版的 YXY DES 2.1 及其代码,

点击以下链接开始阅读:

[原创]DES加密解密工具2.1及其代码——支持字符串及文件加密,支持3重DES

 

4月份发了des加密解密程序1.0 , 随着时间的推移,一直没有做更新,最近有很多朋友给我发邮件说需要3DES,于是随便改了一下发上来,如果发现bug,欢迎各位朋友斧正(我的邮箱:erwin_609@msn.com)
[说明:::和1.0一样,我把des类单独提出来的,注释非常清楚,界面程序的源码大家自己写吧,类是各编译器通用的,呵呵,压缩包内容包括DES算法实现类和测试main函数,如果需要C#或者BCB版的源码,请给我发邮件或者等待我下次更新博客咯,呵呵]
开发环境:
操作系统:Microsoft Windows XP Professional Version 2002 Service Pack 2 2600 English Edtion
编译器:Microsoft Visual Studio 6.0)

[PS:由于没花很多时间, 但是改动的地方有点儿多,很可能有未知BUG,所以我还是推荐大家下载1.0的源码,其实3DES和DES实现上没什么区别,有了DES稍微加点儿东西就出来3DES了,我改的地方多是因为文件加密才改的,主要事情太多了,静不下来弄它......什么时候有时间了再好好做一个]

点击这里下载v1.2
点击此处下载v1.0
点击这里下载v1.2的VC源码
点击这里查看DES算法介绍 及 DESv1.0的源码 


//***************************  v1.2 升级说明 *********************************

1.增加了3DES功能
2.增加了文件加密/解密功能
//***************************  v1.2 升级说明 *********************************

此贴已标记为过时

请阅读最新版的 YXY DES 2.1 及其代码,

点击以下链接开始阅读:

[原创]DES加密解密工具2.1及其代码——支持字符串及文件加密,支持3重DES



//***************************  v1.0 程序 *********************************
自己做的使用DES算法进行对任意长度字符串加密解密的程序1.0
1.本程序可以加密1-4096个字符的任意长度字符串
2.如果密钥长度过短或者为空,程序将使用默认密钥进行加密.
3.加密结果将用16进制字符显示
4.本加密程序同时支持中/英文字符(包括密钥和明文)
5.本加密程序支持特殊字符[例如换行符(回车键)]

程序帮助文档很详细,我就不多做解释了

//***************************  v1.0 程序 *********************************

点击这里下载v1.2
点击此处下载v1.0
点击这里下载v1.2的VC源码
点击这里查看DES算法介绍 及 DESv1.0的源码 

v1.2 截图
2009041401095811.jpg


v1.2的yxyDES类在VC6.0下的运行情况:
图片已删除
 

点击这里下载v1.2
点击此处下载v1.0
点击这里下载v1.2的VC源码
点击这里查看DES算法介绍 及 DESv1.0的源码 
头文件预览:

/* ----------------------------------------------------------------
            // Copyright (C) 2007 尹学渊
            // 版权所有。
            //
            // 文件名:yxyDES2.h
            // 文件功能描述:DES2加密类 头文件
            //
            //
            // 创建人:尹学渊
            //
            // 修改人:
            // 修改描述:
            //
            // 修改人:
            // 修改描述:
//----------------------------------------------------------------
*/
// ---------------------------------------------------------------------------

#ifndef yxyDESH
#define  yxyDESH

#include 
< string >

class  yxyDES2
{
public :
        
// 类构造函数
         yxyDES2(); 

         
// 类析构函数
         ~ yxyDES2(); 

        
// 功能:产生16个28位的key
        
// 参数:源8位的字符串(key),存放key的序号0-1
        
// 结果:函数将调用private CreateSubKey将结果存于char SubKeys[keyN][16][48]
         void  InitializeKey( char *  srcBytes,unsigned  int  keyN);

        
// 功能:加密8位字符串
        
// 参数:8位字符串,使用Key的序号0-1
        
// 结果:函数将加密后结果存放于private szCiphertext[16]
        
//       用户通过属性Ciphertext得到
         void  EncryptData( char *  _srcBytes,unsigned  int  keyN);

        
// 功能:解密16位十六进制字符串
        
// 参数:16位十六进制字符串,使用Key的序号0-1
        
// 结果:函数将解密候结果存放于private szPlaintext[8]
        
//       用户通过属性Plaintext得到
         void  DecryptData( char *  _srcBytes,unsigned  int  keyN);

        
// 功能:加密任意长度字符串
        
// 参数:任意长度字符串,长度,使用Key的序号0-1
        
// 结果:函数将加密后结果存放于private szFCiphertextAnyLength[8192]
        
//       用户通过属性CiphertextAnyLength得到
         void  EncryptAnyLength( char *  _srcBytes,unsigned  int  _bytesLength,unsigned  int  keyN);

        
// 功能:解密任意长度十六进制字符串
        
// 参数:任意长度字符串,长度,使用Key的序号0-1
        
// 结果:函数将加密后结果存放于private szFPlaintextAnyLength[8192]
        
//       用户通过属性PlaintextAnyLength得到
         void  DecryptAnyLength( char *  _srcBytes,unsigned  int  _bytesLength, unsigned  int  keyN);

        
// 功能:Bytes到Bits的转换,
        
// 参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小
         void  Bytes2Bits( char   * srcBytes,  char *  dstBits, unsigned  int  sizeBits);

        
// 功能:Bits到Bytes的转换,
        
// 参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小
         void  Bits2Bytes( char   * dstBytes,  char *  srcBits, unsigned  int  sizeBits);

        
// 功能:Int到Bits的转换,
        
// 参数:待变换字符串,处理后结果存放缓冲区指针
         void  Int2Bits(unsigned  int  srcByte,  char *  dstBits);
        
        
// 功能:Bits到Hex的转换
        
// 参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小
         void  Bits2Hex( char   * dstHex,  char *  srcBits, unsigned  int  sizeBits);
        
        
// 功能:Bits到Hex的转换
        
// 参数:待变换字符串,处理后结果存放缓冲区指针,Bits缓冲区大小
         void  Hex2Bits( char   * srcHex,  char *  dstBits, unsigned  int  sizeBits);

        
// szCiphertextInBinary的get函数
         char *  GetCiphertextInBinary();

        
// szCiphertextInHex的get函数
         char *  GetCiphertextInHex();

        
// Ciphertext的get函数
         char *  GetCiphertextInBytes();

        
// Plaintext的get函数
         char *  GetPlaintext();

        
// CiphertextAnyLength的get函数
         char *  GetCiphertextAnyLength();

        
// PlaintextAnyLength的get函数
         char *  GetPlaintextAnyLength();

private :
        
char  szSubKeys[ 2 ][ 16 ][ 48 ]; // 储存2个16组48位密钥,第2个用于3DES
         char  szCiphertextRaw[ 64 ];  // 储存二进制密文(64个Bits) int 0,1
         char  szPlaintextRaw[ 64 ];  // 储存二进制密文(64个Bits) int 0,1
         char  szCiphertextInBytes[ 8 ]; // 储存8位密文
         char  szPlaintextInBytes[ 8 ]; // 储存8位明文字符串

        
char  szCiphertextInBinary[ 65 ];  // 储存二进制密文(64个Bits) char '0','1',最后一位存'\0'
         char  szCiphertextInHex[ 17 ];  // 储存十六进制密文,最后一位存'\0'
         char  szPlaintext[ 9 ]; // 储存8位明文字符串,最后一位存'\0'

        
char  szFCiphertextAnyLength[ 8192 ]; // 任意长度密文
         char  szFPlaintextAnyLength[ 8192 ]; // 任意长度明文字符串

        
// 功能:生成子密钥
        
// 参数:经过PC1变换的56位二进制字符串,生成的szSubKeys编号0-1
        
// 结果:将保存于char szSubKeys[16][48]
         void  CreateSubKey( char *  sz_56key,unsigned  int  keyN);

        
// 功能:DES中的F函数,
        
// 参数:左32位,右32位,key序号(0-15),使用的szSubKeys编号0-1
        
// 结果:均在变换左右32位
         void  FunctionF( char *  sz_Li, char *  sz_Ri,unsigned  int  iKey,unsigned  int  keyN);

        
// 功能:IP变换
        
// 参数:待处理字符串,处理后结果存放指针
        
// 结果:函数改变第二个参数的内容
         void  InitialPermuteData( char *  _src, char *  _dst);

        
// 功能:将右32位进行扩展位48位,
        
// 参数:原32位字符串,扩展后结果存放指针
        
// 结果:函数改变第二个参数的内容
         void  ExpansionR( char *  _src, char *  _dst);

        
// 功能:异或函数,
        
// 参数:待异或的操作字符串1,字符串2,操作数长度,处理后结果存放指针
        
// 结果: 函数改变第四个参数的内容
         void  XOR( char *  szParam1, char *  szParam2, unsigned  int  uiParamLength,  char *  szReturnValueBuffer);

        
// 功能:S-BOX , 数据压缩,
        
// 参数:48位二进制字符串,
        
// 结果:返回结果:32位字符串
         void  CompressFuncS( char *  _src48,  char *  _dst32);

        
// 功能:IP逆变换,
        
// 参数:待变换字符串,处理后结果存放指针
        
// 结果:函数改变第二个参数的内容
         void  PermutationP( char *  _src, char *  _dst);

};

#endif
 

 

 

此贴已标记为过时

请阅读最新版的 YXY DES 2.1 及其代码,

点击以下链接开始阅读:

[原创]DES加密解密工具2.1及其代码——支持字符串及文件加密,支持3重DES



点击这里下载v1.2
点击此处下载v1.0
点击这里下载v1.2的VC源码
点击这里查看DES算法介绍 及 DESv1.0的源码 

 

 

此贴已标记为过时

请阅读最新版的 YXY DES 2.1 及其代码,

点击以下链接开始阅读:

[原创]DES加密解密工具2.1及其代码——支持字符串及文件加密,支持3重DES

转载于:https://www.cnblogs.com/erwin/archive/2007/06/12/779873.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值