zoukankan      html  css  js  c++  java
  • 混合加密算法(RSA和DES)

    一、混合加密的理由

      a、前面提及了RSA加解密算法DES加解密算法这两种加解密算法,由于随着计算机系统能力的不断发展,DES的安全性比它刚出现时会弱得多,追溯历史破解DES的案例层出不穷,一台实际的机器可以在数天内破解DES是让某些人相信他们不能依赖DES的安全性的唯一方法。而相对于DES,RSA的安全性则相对高些,虽然破解RSA的案例也有,但其所付出的代价是相对大的(相对DES),如今RSA的密钥也在升级,这说明破解RSA的难度也在增大。

      b、在RSA加解密算法中提及到RSA加密明文会受密钥的长度限制,这就说明用RSA加密的话明文长度是有限制的,而在实际情况我们要进行加密的明文长度或许会大于密钥长度,这样一来我们就不得不舍去RSA加密了。对此,DES加密则没有此限制。

      鉴于以上两点(个人观点),单独的使用DES或RSA加密可能没有办法满足实际需求,所以就采用了RSA和DES加密方法相结合的方式来实现数据的加密。

      其实现方式即:

      1、信息(明文)采用DES密钥加密。

      2、使用RSA加密前面的DES密钥信息。

      最终将混合信息进行传递。

      而接收方接收到信息后:

      1、用RSA解密DES密钥信息。

      2、再用RSA解密获取到的密钥信息解密密文信息。

      最终就可以得到我们要的信息(明文)。

    二、实现例子:

    结合前面RSA和DES加密:

    复制代码
    /// <summary>
    /// RSA和DES混合加密
    /// </summary>
    /// <param name="data">待加密数据</param>
    /// <param name="publicKey">RSA公钥</param>
    /// <returns></returns>
    public Param Encrypt(string data, string publicKey)
    {
        //加密数据
        DESSecurity DES = new DESSecurity();
        string DESKey = DES.GenerateKey();
        string encryptData = DES.Encrypt(data, DESKey);
    
        //加密DESkey
        RSASecurity RSA = new RSASecurity();
        string encryptDESKey = RSA.Encrypt(DESKey, publicKey);
    
        Param mixParam = new Param();
        mixParam.DESKey = encryptDESKey;
        mixParam.Data = encryptData;
        return mixParam;
    }
    
    /// <summary>
    /// RSA和DES混合解密
    /// </summary>
    /// <param name="data">待解密数据</param>
    /// <param name="key">带解密的DESKey</param>
    /// <param name="privateKey">RSA私钥</param>
    /// <returns></returns>
    public string Decrypt(string data, string key, string privateKey)
    {
        //解密DESKey
        RSASecurity RSA = new RSASecurity();
        string DESKey = RSA.Decrypt(key, privateKey);
    
        //解密数据
        DESSecurity DES = new DESSecurity();
        return DES.Decrypt(data, DESKey);
    }
    复制代码

    Demo下载:MixCrypto.rar

  • 相关阅读:
    hibernate理解
    struts理解
    网上书城项目
    编码过程中遇到的问题
    JS回调函数
    requirejs 一个拆分js项目的类库
    jq插件开发总结
    转载-- 魔兽哈希算法封装和测试
    转载--C# PLINQ 内存列表查询优化历程
    Oracle删除死锁进程的方法
  • 原文地址:https://www.cnblogs.com/Jeremy2001/p/6718412.html
Copyright © 2011-2022 走看看