一 对称加密
单密钥的加密算法又称为对称加密:整个系统由如下几部分构成:需要加密的明文、加密算法和密钥,在加密和解密过程中,使用同一个密钥解密。常见的加密算法有DES、AES、RC4等。
DES的原始思想可以参照二战德国的恩格玛机,其基本思想大致相同。传统的密码加密都是由古代的循环
移位
思想而来,恩格玛机在这个基础之上进行了扩散模糊。但是本质原理都是一样的。现代DES在二进制级别做着同样的事:替代模糊,增加分析的难度。
DES 使用一个 56 位的
密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。
这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。
DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密钥长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。DES加密算法特点:分组比较短、密钥太短、密码生命周期短、运算速度较慢。DES工作的基本原理是,其入口参数有三个:key、data、mode。 key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。当模式为加密模式时,明文按照64位进行分组,形成明文组,key用于对数据加密,当模式为解密模式时,key用于对数据解密。实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性。
DES 的常见变体是三重 DES,使用 168 位的密钥对资料进行三次加密的一种机制;它通常(但非始终)提供极其强大的安全性。如果三个 56 位的子元素都相同,则三重 DES 向后兼容 DES。
二 对称加密
双密钥的加密算法又称为非对称加密:整个系统由如下几部分构成:需要加密的明文、加密算法、私钥和公钥。在该系统中,私钥和公钥都可以被用来加密和解密,但是用私钥加密的明文,必须要用对应的公钥解密,用公钥加密的明文,必须用对应的私钥解密。常见的双密加密算法是RSA等。
在对称加密中,私钥不能暴露,否则在算法公开的情况下,数据等于明文,而在非对称加密中,公钥是公开的,私钥是保密的。这样任何人都可以把自己的信息通过公钥和算法加密,然后发送给公钥的发布方(公钥的发布方持有公钥对应的私钥),这有公钥的发布方才能解开密文。(给谁发信息,就用谁的公钥对待发信息进行加密,接受方用自己的私钥进行解密,也就是说私钥是自己用的,用来进行解密的,公钥是给别人用的,用来做加密的,如果公钥加密的信息只要私钥才可以解开,那么只要私钥不泄漏,通信就是安全的。)
最常用的是linux中ssh-keygen -t rsa 运用,会生成公钥和私钥然后将公钥发给服务器或希望登录的服务端,这样可以实现远程的登录访问。
三 摘要算法
在对称加密和非对称加密中,它们都有一个共同的特点,即数据可以加密,也可以解密。实际上,我们还需要一种加密需求,只需要加密,形成一个密文,而不需要解密,甚至极端地说,要求不可解。这时候可以使用哈希算法等。
哈希算法是一种从任意数据中创建固定长度摘要信息的算法。一般我们要求,对于不同的数据,要求产生的摘要信息也是唯一的。常见的哈希算法包括MD5、SHA-1等。
MD5
即Message-Digest Algorithm 5(消息摘要算法第五版)的简称,是当前计算机领域用于
确保信息传输完整一致而广泛使用
的
散列算法
之一(又译哈希算法、摘要算法等),主流编程语言普遍已有MD5的实现。
将数据(如一段文字)运算变为另一固定长度值,是散列算法的基础原理
,MD5的前身有
MD2
、
MD3
和
MD4
。
MD5已经广泛使用在为文件传输提供一定的可靠性方面。例如,服务器预先提供一个MD5校验和,用户下载完文件以后,用MD5算法计算下载文件的MD5校验和,然后通过检查这两个校验和是否一致,就能判断下载的文件是否出错。
MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits
散列
。基本方式为,求余、取余、调整长度、与链接变量进行循环运算。得出结果。
一般128位的MD5散列被表示为32位
十六进制
数字。以下是一个43位长的仅
ASCII
字母列的MD5散列:
MD5("The quick brown fox jumps over the lazy dog")
= 9e107d9d372bb6826bd81d3542a419d6
即使在原文中作一个小变化(比如用c取代d)其散列也会发生巨大的变化:
MD5("The quick brown fox jumps over the lazy cog")
= 1055d3e698d289f2af8663725127bd4b
空文的散列为:
MD5("")
= d41d8cd98f00b204e9800998ecf8427e
安全散列算法(英语:Secure Hash Algorithm)是一种能计算出一个数字信息所对应到的,长度固定的字符串(又称信息摘要)的算法。且若输入的信息不同,它们对应到不同字符串的机率很高;而SHA是FIPS所认证的五种安全散列算法。这些算法之所以称作“安全”是基于以下两点(根据官方标准的描述):“1)由信息摘要反推原输入信息,从计算理论上来说是很困难的。2)想要找到两组不同的信息对应到相同的信息摘要,从计算理论上来说也是很困难的。任何对输入信息的变动,都有很高的机率导致其产生的信息摘要迥异。”
SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布;是美国的政府标准。后四者有时并称为SHA-2。SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。但SHA-1的安全性如今被密码学家严重质疑;虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的散列算法。缘于最近[何时?]对SHA-1的种种攻击发表,“美国国家标准与技术研究院(NIST)开始设法经由公开竞争管道(类似高级加密标准AES的发展经过),发展一个或多个新的散列算法。”
2012年10月2号,Keccak被选为NIST散列函数竞赛的胜利者,[1]成为SHA-3。 SHA-3并不是要取代SHA-2,因为SHA-2目前并没有出现明显的弱点。由于对MD5出现成功的破解,以及对SHA-0和SHA-1出现理论上破解的方法,NIST感觉需要一个与之前算法不同的,可替换的加密散列算法,也就是现在的SHA-3。设计者宣称在Intel Core 2的CPU上面,此算法的性能是12.5cpb(每字节周期数,cycles per byte)。不过,在硬件实做上面,这个算法比起其他算法明显的快上很多。