本文是阅读Hollis的文章之后的总结。

加密策略主要分为:1.数字摘要;2.对称加密;3.非对称加密;4.数字签名;5.数字证书,这5种策略

一、数字摘要

数字摘要也称为消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash函数对消息进行计算而产生。如果消息在传递的途中改变了,接收者通过对收到消息采用相同的Hash重新计算,新产生的摘要与原摘要进行比较,就可知道消息是否被篡改了。因此消息摘要能够验证消息的完整性。消息摘要采用单向Hash函数将需要计算的内容“摘要”成固定长度的串,这个串亦称为数字指纹。这个串有固定的长度,且不同的明文摘要成密文,其结果总是不同的(相对的),而相同的明文其摘要必定一直。这样这串摘要便可成为严重明文是否是“真身”的“指纹”了。

java 避免Infinity java 避免代码中密钥_每天读后感

MD5

MD5即Message Digest Algorithm 5(信息摘要算法5),是数字摘要算法一种实现,用于确保信息传输完整性和一致性,摘要长度为128位。MD5由MD4、MD3、MD2改进而来,主要增强算法复杂度和不可逆性,该算法因其普遍、稳定、快速的特点,在业界得到了极为广泛的使用,目前主流的编程语言普遍都已有MD5的实现。

java的实现:

/**
	 * 将传入的src进行加密处理
	 * @param src:传入的字符串
	 * @return String:加密后的字符串
	 * @throws NoSuchAlgorithmException 
	 */
	public static String md5(String src) throws NoSuchAlgorithmException{
		//将字符串信息采用MD5处理
		MessageDigest md = MessageDigest.getInstance("MD5");
		byte[] output = md.digest(src.getBytes());
		//将MD5结果转换成字符串
		//String s = new String(output); 输出:�|��plL4�h��N{,是乱码
		//用Base64处理一下怎么都不会乱码
		String s = Base64.encodeBase64String(output);
		return s;
	}
SHA:

SHA的全称是Secure Hash Algorithm,即安全散列算法。1993年,安全散列算法(SHA)由美国国家标准和技术协会(NIST)提出,并作为联邦信息处理标准(FIPS PUB 180)公布,1995年又发布了一个修订版FIPS PUB 180-1,通常称之为SHA-1。SHA-1是基于MD4算法的,现在已成为公认的最安全的散列算法之一,并被广泛使用。SHA-1算法生成的摘要信息的长度为160位,由于生成的摘要信息更长,运算的过程更加复杂,在相同的硬件上,SHA-1的运行速度比MD5更慢,但是也更为安全。

二、对称加密

对称加密算法是应该较早的加密算法,技术成熟。在对称加密算法中,数据发送方将明文(原始数据)和加密密匙一起经过特殊加密算法处理后,生产复杂的加密密文进行发送,数据接收方收到密文后,若想读取原文,则需要使用加密使用的密匙及相同算法的逆算法对加密的密文件进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密匙只有一个,发送和接收双方都使用这个密匙对数据进行加密和解密,这就要求加密和解密方实现都必须知道加密的密匙。

java 避免Infinity java 避免代码中密钥_字符串_02

DES

DES算法属于对称加密算法,明文按64位进行分组,密钥长为64位,但事实上只有56为参与了DES运算(第8/16/24/32/40/48/56/64位是校验位,使得每个密匙都有奇数个1),分组后的明文和56位的秘钥按位替换或交换的方法形成密文。由于计算机运算能力的增强,原版DES密码的秘钥长度变得容易被保利破解,因此演变出了3DES算法,3DES是DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密,是DES的一个更安全的变形。

AES

AES裙长是Advanced Encryption Standard,即高级加密标准,该算法是美国联邦政府采用的一种对称加密标准,这个标准用来代替原先的DES算法,已经广为全世界所使用,已然成为对称加密算法中最流行的算法之一。AES算法作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点,设计有三个密钥长度:128,192,256位,比DES算法的加密强度更高,更为安全。

三、非对称加密

非对称加密算法又称为公开密钥加密算法,它需要两个密钥,一个称为公开密钥(public key),即公钥,另一个称为私有密钥(private key),即私钥。公钥和私钥需要配对使用,如果用公钥对数据进行加密,只能用对应的私钥才能进行解密,而如果使用私钥对数据进行加密,那么只能用对用的公钥才能进行解密。因为加密和解密使用的是两个不同的秘钥,所有这种算法称为非对称加密算法。非对称加密算法实现机密信息交换的基本过程是:甲方生成一对秘钥并将其中一把作为公钥向其他人公开,得到该公钥的乙方使用该秘钥对机密信息进行加密后再发送给甲方,甲方在使用自己保存的另一把专用秘钥,对加密后的信息进行解密。

java 避免Infinity java 避免代码中密钥_数字签名_03

RSA

RSA非对称加密算法是1997年由Ron Rivest、AdiShamirh和LenAdleman开发的,RSA取名来自开发他们三者的名字。RSA是目前最有影响力的非对称加密算法,它能抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但反过来想要对其乘积进行因式分解却十分困难,因此可以将乘积公开作为加密秘钥。

四、数字签名

签名认证是对非对称加密技术与数字摘要技术的综合运用,指的是将通信内容的摘要信息使用发送者的私钥进行加密,然后将密文与原文一起传输个信息的接受者,接受者通过发送者的公钥解密被加密的摘要信息,然后使用与发送者相同的摘要算法,对接收到的内容采用相同的方式产生摘要串,与解密的摘要串进行对比,如果相同者说明接收到的内容是完整的,在传输过程中没有收到第三方篡改,否则则说明通信内容已被第三方修改。

每个人都有其特有私钥且都是对外界保密的,而通过私钥加密的信息,只能通过其对于的公钥才能解密。因此,私钥可以代表私钥持有者的身份,可以通过私钥对应的公钥来对私钥拥有者的身份进行校验。通过数字签名,能够确认消息是由消息发送方的签名并发送出来的,因为其他人根本假冒不了消息发送方的签名,他们没有消息发送者的私钥。而不同的内容,摘要信息千差万别,通过数字摘要算法,可以确保传输内容的完整性,如果传输内容中途被篡改,对应的数字签名的值也将发生改变。

只有信息的发送者才能产生别人无法伪造的数字签名串,这个串能对信息发送者所发送的内容完整性以及发送者的身份进行校验和鉴别。

java 避免Infinity java 避免代码中密钥_数字签名_04

通信正文经过相应的摘要算法生成摘要后,使用消息发送者的私钥进行加密,生成数字签名。

java 避免Infinity java 避免代码中密钥_字符串_05

五、数字证书

我们每个人都有很多形式的身份证明,如身份证、驾驶证等等,这些证件都是由相应的签发机构盖章认证,可信程度比较高,很难伪造,并且随着科技发展还可以通过指纹、视网膜等严重。数字证书(Digital Certificate),也称为电子证书,类似与日常生活中的身份证,也是一种形式的身份认证,用于标识网络中的用户身份。数字证书集合了多种密码学的加密算法,证书自身带有公钥信息,可以完成相应的加密、解密操作,同时,还拥有自身信息的数字签名,可以鉴别证书的颁发机构,以及证书内容的完整性。由于证书本身含有用户的认证信息,因此可以作为用户身份识别的依据。