DES是分组加密算法,速度快,使用单一密钥,加密解密都使用同一个密钥,一般用于大量数据加密,目前处于半淘汰状态。
RSA算法是流式加密算法,速度慢,但是使用成对的密钥,加密解密使用不同的密钥,有利于保密和身份认定,一般用于加密DES类算法的密钥。

对称加解密算法
通信双方通信前共同拟定一个密钥,不对第三方公开。 消息发送前都通过该密钥加密,到达后也通过该密钥解密。 不具有个体原子性,一个密钥被共享,泄露机率加大。

公私钥加解密举例
设若甲有一份需保密的数字商业合同发给乙签署。经过如下步骤: 1. 甲用乙的公钥对合同加密。 2. 密文从甲发送到乙。 3. 乙收到密文,并用自己的私钥对其解密。 4. 解密正确,经阅读,乙用自己的私钥对合同进行签署。 5. 乙用甲的公钥对已经签署的合同进行加密。 6. 乙将密文发给甲。 7. 甲用自己的私钥将已签署合同解密。 8. 解密正确,确认签署。

从以上步骤,我们知道: 1. 用公钥加密的密文能且只能用与其唯一配对的私钥才能解开。 2. 如果某份密文被解开,那么肯定是密文的目标信息主体解开的。 3. 私钥因其唯一标识所有者的属性,被用于数字签名,具有法律效力。

DES 是一种单一密钥加解密算法。通信主体之间只有一个密钥,该密钥不对第三方公开。 RSA 则是公钥/私钥系统。该系统比 DES 系统更原子化,具有普遍应用意义。

1、DES 加解密算法

DES (Data Encryption Standard),是IBM在上个世纪70年代开发的单密钥对称加解密算法。该算法利用一个56+8奇偶校验位(第8, 16, 24, 32, 40, 48, 56, 64位)=64位的密钥对以64位为单位的块数据进行加解密。

有明文M(64位) = 0123456789ABCDEF,即 M(64位) = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

L(32位) = 0000 0001 0010 0011 0100 0101 0110 0111
R(32位) = 1000 1001 1010 1011 1100 1101 1110 1111

有密钥K(64位) = 133457799BBCDFF1,即 K(64位) = 0001001 0011010 0101011 0111100 1001101 1011110 1101111 1111000 (奇校验)其中红色标注为奇偶校验位,即实际密钥为56位。

第一步:生成16个子钥(48位)

对K使用PC-1(8×7),详见:http://zh.wikipedia.org/wiki/DES%E8%A1%A5%E5%85%85%E6%9D%90%E6%96%99
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
主要输入的64位数据中只用到了56位,剩余的8位可以用于奇偶校验。

从而,由K(64位) = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
得到K+(56位) = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111,进而
C0(28位) = 1111000 0110011 0010101 0101111
D0(28位) = 0101010 1011001 1001111 0001111
C1和D1分别为C0和D0左移1位。… C3和D3分别为C2和D2左移2位 …

从而得到C1D1 ~ C16D16:
C1 = 1110000110011001010101011111 D1 = 1010101011001100111100011110
C2 = 1100001100110010101010111111 D2 = 0101010110011001111000111101
… …
C16 = 1111000011001100101010101111 D16 = 0101010101100110011110001111

Kn(48位) = PC-2( CnDn(56位) ),该置换从56位的密钥调度状态中取出48位的子密钥。最终得到所有16个子钥,每个48位:

K1 = 000110 110000 001011 101111 111111 000111 000001 110010 
K2 = 011110 011010 111011 011001 110110 111100 100111 100101 
… …
K16 = 110010 110011 110110 001011 000011 100001 011111 110101

第二步:用子钥对64位数据加密

对明文M使用IP(8×8)
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

由于M(64位) =0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111,对M运用IP,故有 IP(64位) = 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010

IP(64位) = L0(32位) + R0(32位)故
L0 (32位) = 1100 1100 0000 0000 1100 1100 1111 1111
R0 (32位) = 1111 0000 1010 1010 1111 0000 1010 1010

从L0和R0开始,循环16次,得出L1R1到L16R16,依据递推公式:

Ln = R(n-1)

Rn = L(n-1) + f (R(n-1),Kn)

其中除了Kn为48位,其他变量及函数均为32位。其中+号表示异或XOR运算,函数f 从一个32位的数据块R(n-1)和一个48位子钥Kn得到一个新的32位数据块。
到此为止,我们得到了16对32位的数据块,即 L1R1, L2R2, L3R3, …, L16R16。最后一对L16R16就是我们需要的。

继续对R16L16(64位)运用一次重排列: IP-1(8×8)。即在
L16(32位) = 0100 0011 0100 0010 0011 0010 0011 0100
R16(32位) = 0000 1010 0100 1100 1101 1001 1001 0101
R16L16(64位) = 00001010 01001100 11011001 10010101 01000011 01000010 00110010 00110100时,对R16L16运用IP-1,得 IP-1(64位) = 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101 = 85E813540F0AB405

从而,经过以上步骤,最终从明文 M = 0123456789ABCDEF 得到密文 C = IP-1 = 85E813540F0AB405,以上为加密过程,要解密,依次反向计算即可。

多层 DES

DES 算法可能是运用最广的对称加解密算法,但由于密钥长度较短,导致安全性不高。故在安全性占首要地位的应用场合如金融业等,采用多个不同密钥(K1, K2, K3)的多层DES加解密。这些多层DES系统被广泛应用,由此衍生出Triple DES, G-DES, DES-X, LOKI89和ICE等对称加解密系统。

2、RSA 加解密算法

与DES不同,RSA算法中,每个通信主体都有两个钥匙,一个公钥一个私钥。一般应用过程为:

RSA 具体算法:公私钥生成

1)随机选定两个大素数p、q,计算公钥和私钥的公共模数 n = pq
2)计算模数n的欧拉函数 φ(n) ,这里φ(n)=(p-1)(q-1)
3)选定一个正整数e , 使1 < e < φ(n) , 且e与φ(n)互质。
4)计算d, 满足 de ≡ 1(mod φ(n))。de被n除的余数为1,或者说de减去1,可以被n整除。

n与e决定公钥, n与d决定私钥。在已知n和e的情况下,由于n非常大求解φ(n)是不可行的,这样别保证了d的安全性。

RSA 具体算法:加解密
该过程为小张给小李发消息,公钥为小李的公钥(n ,e), 私钥为小李的私钥(n ,d).
小张欲给小李发一个消息M, 他先把M转换为一个大数m < n, 然后用小李的公钥(n ,e)把m加密为另一个大数: c = me mod n
小李收到小张发来的大数c, 着手解密. 通过自己的私钥(n ,d), 得到原来的大数m: m = cd mod n
再把m转换为M, 小李即得到小张的原始消息.

这个过程之所以能通过,具体的证明过程要用到欧拉定理,详细知识请参考这里

选取的素数p和q要足够大,从而乘积n足够大,在事先不知道p和q的情况下分解n是计算上不可行的。由于进行的都是大数计算,使得RSA最快的情况也比DES慢上倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

4、DES和RSA简介的更多相关文章

  1. 加密算法 DES 3DES RSA AES 简介

    数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为[密文],使其只能在输入相应的[密钥]之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人 ...

  2. 加解密 3DES AES RSA 简介 示例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...

  4. (转)DES、RSA、MD5、SHA、随机生成加密与解密

    一.数据加密/编码算法列表   常见用于保证安全的加密或编码算法如下:   1.常用密钥算法   密钥算法用来对敏感数据.摘要.签名等信息进行加密,常用的密钥算法包括:   DES(Data Encr ...

  5. C#封装加密算法(MD5、SHA、HMAC、DES、RSA)的一个类

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...

  6. c#加密解密源码,md5、des、rsa

    从网上找来的代码,顺手改改,用起来更方便. 配置文件 using System; using System.Collections.Generic; using System.Text; using ...

  7. Spring Cloud Config - RSA简介以及使用RSA加密配置文件

    简介 RSA非对称加密有着非常强大的安全性,HTTPS的SSL加密就是使用这种方法进行HTTPS请求加密传输的.因为RSA算法会涉及Private Key和Public Key分别用来加密和解密,所以 ...

  8. RSA算法原理——(2)RSA简介及基础数论知识

    上期为大家介绍了目前常见加密算法,相信阅读过的同学们对目前的加密算法也算是有了一个大概的了解.如果你对这些解密算法概念及特点还不是很清晰的话,昌昌非常推荐大家可以看看HTTPS的加密通信原理,因为HT ...

  9. 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用(转载)

    加密技术通常分为两大类:"对称式"和"非对称式". 对称性加密算法:对称式加密就是加密和解密使用同一个密钥.信息接收双方都需事先知道密匙和加解密算法且其密匙是相 ...

随机推荐

  1. BIOS中未启用虚拟化支持系列~~例如:因此无法安装Hyper-V

    异常处理汇总-服务器系列:http://www.cnblogs.com/dunitian/p/4522983.html 一般都是启动一下CUP虚拟化就可以了 比如华硕的:

  2. IE的F12开发人员工具不显示问题

    按下F12之后,开发人员工具在桌面上看不到,但是任务栏里有显示.将鼠标放在任务栏的开发人员工具上,出现一片透明的区域,选中之后却出不来.将鼠标移动到开发人员工具的缩略图上,右键-最大化,工具就全屏出现 ...

  3. ASP.NET Core中如影随形的”依赖注入”[上]: 从两个不同的ServiceProvider说起

    我们一致在说 ASP.NET Core广泛地使用到了依赖注入,通过前面两个系列的介绍,相信读者朋友已经体会到了这一点.由于前面两章已经涵盖了依赖注入在管道构建过程中以及管道在处理请求过程的应用,但是内 ...

  4. C#为IE编写BHO插件心得

    啥是BHO,其实大家都用过,没听过只是没在意而已,来张图你就知道是什么了 是不是很熟悉,就是这么个玩意~~ 先说说我要用来干嘛~我们有个库,里面数据很全面,但是某个部门需要在第三方的B/S系统录入某些 ...

  5. spring源码分析之<context:property-placeholder/>和<property-override/>

    在一个spring xml配置文件中,NamespaceHandler是DefaultBeanDefinitionDocumentReader用来处理自定义命名空间的基础接口.其层次结构如下: < ...

  6. Create a Team in RHEL7

    SOLUTION VERIFIED September 13 2016 KB2620131 Environment Red Hat Enterprise Linux 7 NetworkManager ...

  7. android SystemServer.java启动的服务。

    EntropyService:熵(shang)服务,用于产生随机数PowerManagerService:电源管理服务ActivityManagerService:最核心服务之一,Activity管理 ...

  8. maven 快照

    大型应用软件一般由多个模块组成,一般它是多个团队开发同一个应用程序的不同模块,这是比较常见的场景.例如,一个团队正在对应用程序的应用程序,用户界面项目(app-ui.jar:1.0) 的前端进行开发, ...

  9. docker4dotnet #1 – 前世今生 & 世界你好

    作为一名.NET Developer,这几年看着docker的流行实在是有些眼馋.可惜的是,Docker是基于Linux环境的,眼瞧着那些 java, python, node.js, go 甚至连p ...

  10. Oracle中的commit详解

    本文转自 : http://blog.csdn.net/hzhsan/article/details/9719307 它执行的时候,你不会有什么感觉.commit在数据库编程的时候很常用,当你执行DM ...