加密算法概念简要总结

/ 默认分类 / 0 条评论 / 444浏览

加密算法概念简要总结

1.散列

散列也就是我们常说的哈希,把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出通常称作散列值、数字指纹 或 消息摘要。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间(不同的输入有可能会散列成相同的输出,几率非常小),而不可能从散列值来逆向推出输入值,也就是说,哈希函数是不可逆的。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。大白话就是,每一个入参都被一一映射为唯一对应的密文,现在很多所谓的解密网站,其实也就是在后台存储大量的hash对应表(彩虹表可以了解下,就是为了提高破解效率),或者后台不断暴力破解,寻找hash值和密文相同的明文.

常见的hash算法有如下几种: MD5 , 输出128bit的散列值 SHA1 , 输出160bit的散列值 SHA224, 输出224bit的散列值 SHA256, 输出256bit的散列值 SHA384, 输出384bit的散列值 SHA512, 输出512bit的散列值

ps:HMAC_SHAn和SHAn的关系: 百度百科: “HMAC是密钥相关的哈希运算消息认证码(Hash-basedMessageAuthenticationCode),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。”所以,HMACSHA1也是需要一个密钥的,而SHA1不需要。

关于这一点区别在开源项目hutool的加密工具模块很容易理解:

	/**
	 * HmacSHA1加密器<br>
	 * 例:<br>
	 * HmacSHA1加密:hmacSha1(key).digest(data)<br>
	 * HmacSHA1加密并转为16进制字符串:hmacSha1(key).digestHex(data)<br>
	 *
	 * @param key 加密密钥,如果为<code>null</code>生成随机密钥
	 * @return {@link HMac}
	 */
	public static HMac hmacSha1(byte[] key) {
		return new HMac(HmacAlgorithm.HmacSHA1, key);
	}
	
	
		/**
	 * SHA1加密,生成16进制SHA1字符串<br>
	 *
	 * @param data 数据
	 * @return SHA1字符串
	 */
	public static String sha1(String data) {
		return new Digester(DigestAlgorithm.SHA1).digestHex(data);
	}

Java中的加密工具类,推荐使用Hutool eg:

HMac hmacSha1 = SecureUtil.hmacSha1(appSecret);
String sign = new String(hmacSha1.digest(appKey + timeMillis));

2.对称加密

加密和解密秘钥相同,或者由一个能很容易的推出另一个。对称加密算法如:DES(Data Encryption Standard,即数据加密标准)、3DES、AES(Advanced Encryption Standard 高级加密标准)等

3.非对称加密

加密和解密秘钥不相同。其中,对外公开的秘钥,称为公钥。不对外公开的秘钥,称为私钥。对称加密算法如:RSA(三位发明者姓氏开头字母拼在一起组成的)加密算法,DSA加密算法

4.https中的加密算法应用

SSL(Secure Sockets Layer 安全套接字协议) TLS(Transport Layer Security 传输层安全性协议) SSL是TLS的前身,TLS 1.0 是 1999 年 1 月发布的 SSL v.3.0 的升级,简而言之,SSL 已过时,TLS 是旧 SSL 协议的新名称,更现代的加密标准。但SSL这个术语被更多人熟悉,所以有时候我们也用SSL来表示这一类技术.

HTTP协议传输的数据都是明文,为了安全起见SSL协议出现了,http+ssl就是我们常说的https(HTTP Over TLS基于tls的http),通过ssl协议可以首先数据的加密传输,之后ssl不断更新升级,升级后叫做TLS,但是目前我们有时候任然叫它SSL,或者SSL/TLS,或者TLS

http默认端口80,https是443

关于Https的传输加密解密流程,我们之前讨论过,这里我画了一个总结图: