zoukankan      html  css  js  c++  java
  • [原创]使用 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 截图



    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

  • 相关阅读:
    javascript控制页面(含iframe进行页面跳转)跳转、刷新的方法汇总
    window下安装docker
    http协议
    php环境选择
    jsmooth和exe4j
    域名解析
    clientHeight,offsetHeight,scrollHeight迷一样的三个值
    LinkedHashMap和hashMap和TreeMap的区别
    fiddler抓包
    mac下配置openfire
  • 原文地址:https://www.cnblogs.com/erwin/p/779873.html
Copyright © 2011-2022 走看看