混合加密算法(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

时间: 2024-09-29 18:19:27

混合加密算法(RSA和DES)的相关文章

RSA与AES混合加密算法的实现

使用 PVRTC 压缩格式创建纹理(Creating textures in the PVRTC compression format) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 有关该篇

加密算法—MD5、RSA、DES

    最近因为要做一个加密的功能,简单了解了一下加密算法,现在比较常用的有三个加密算法MD5加密算法.RSA加密算法.DES加密算法.     MD5加密算法     定义:MD5算法是将任意长度的"字节串"变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,即使你看到源程序和算法描述,也无法将MD5的值变回原始的字符串.     应用:在有些操作系统中,用户的密码是以MD5的方式保存的,用户登录时,系统吧用户输入的密码计算成MD5中,然后和数据库中保存的MD5值进行

openssl 非对称加密算法RSA命令详解

1.非对称加密算法概述 非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下: 1.加密密钥和解密密钥不同 2.密钥对中的一个密钥可以公开 3.根据公开密钥很难推算出私人密钥 根据非对称加密算法的特点,可用户数字签名.密钥交换.数据加密.但是由于非对称加密算法较对称加密算法加密速度慢很多,故最常用的用途是数字签名和密钥交换. 目前常用的非对称加密算法有RSA, DH和DSA三种,但并非都可以用于密钥交换和数字签名.而是RSA可用于数字签名和密钥交换,DH

Java加密技术(四)非对称加密算法RSA

RSA  这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman. 这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥.相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了.RSA同时有两把钥匙,公钥与私钥.同时支持数字签名.数字签名的意义在于,对传输过来的数据进行校验.确保数据在传输工程中不被修改. 流程分析: 甲方构建

Java加密算法 RSA

Java加密算法 RSA 2015-06-06 08:44 511人阅读 评论(0) 收藏 举报  分类: JAVA(57)  公钥加密也称为非对称加密.速度慢.加密和解密的钥匙不相同,某一个人持有私钥,任何人都可以知道公钥 [java] view plaincopy package com.stone.security; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.securi

JAVA 非对称加密算法RSA

非对称加密算法 RSA过程 : 以甲乙双方为例 1.初始化密钥 构建密钥对,生成公钥.私钥保存到keymap中 KeyPairGenerator ---> KeyPair --> RSAPublicKey.RSAPrivateKey 2.甲方使用私钥加密, 加密后在用私钥对加密数据进行数据签名,然后发送给乙方 RSACoder.encryptByPrivateKey(data, privateKey); RSACoder.sign(encodedData, privateKey); 3.乙方则

非对称加密算法RSA使用注意事项

原文:非对称加密算法RSA使用注意事项 第一个问题,也是最重要的一个——RSA无法对超过117字节的数据进行加密!切记!其实也勿需要求对更大数据的加密,虽然网上已经有相关解决方案,比如BigInteger项目.但这点确实需要注意,如果对大于117字节的数据加密就会抛异常出来,说法还有点莫名其妙.考虑下RSA的主要用途就可以理解了,一般我们使用RSA的主要用途是进行数字签名,另外就是对“对称加密”算法的KEY和IV向量进行加密: 第二个问题,假设要对一个文本文件(比如xml文件)中的某些数据进行加

Java非对称加密算法--RSA加密算法

Java非对称加密算法--RSA加密算法          RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院工作.RSA就是他们三人姓氏开头字母拼在一起组成的. 1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相

3个著名加密算法(MD5、RSA、DES)的解析

MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展而来.    MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数. MD5的典型应用是对一段Message(字