密码学历史
现在啥都要加密,IM系统聊天记录、邮件、密码更不用说。作为程序员,平常网关鉴权、内部系统api鉴权、jwt、openAPI都需要了解加密算法。不仅要会用别人api的加密算法,也要学会使用某些规则制定加密算法暴露给外部调用
加密算法
保密通信模型
普通加密
Base64
base64严格来说不算是加解密,只能算是一种编码规则,他的由来是早期电子邮箱只允许ASCII传递,就出现了Base64这种基于64个字符的编码算法 Apache Commons Codec提供了Base64的加密算法
URLBase64
Base64算法最初用于电子邮件系统,后经演变成为显式传递Url参数的一种编码算法,通常称为“Url Base64”。它是Base64算法的变体。主要差别是将原Base64字符映射表中的“+”和“/”替换为“-”和“_”
Hex
Hex类用于十六进制转换。常配合消息摘要算法处理摘要值,以十六进制形式公示。常配合消息摘要算法处理摘要值
对称加密
- 高级数据加密标准AES算法,两边都是用同一个秘钥进行加解密
- 数据加密标准 DES算法
Java 7提供了DES算法支持,但仅支持56位的密钥长度。我们知道密钥长度与加密强度成正比。我们可以使用Boucy Calstle提供密钥长度,由56位提高至64位。
- 三重DES DESede
- 国际数据加密标准 IDEA
- 基于口令加密 PBE
非对称加密
分有公钥和私钥,发布者用公钥加密,接收者用私钥解密。 RSA是非对称密码体制的典范,不仅可以完成一半的数据保密操作,同时也支持数字签名与验证。
散列函数
常见的散列函数
目前常见的有MD5(32位16进制)、MD5加盐、SHA256、HmacSHA256加秘钥。散列家族还有:
- MD(Message Digest 消息摘要算法)
- MD2
- MD4
- MD5
- SHA(Secure Hash Algorithm 安全散列算法)
- SHA-1
- SHA-224
- SHA-256
- SHA-384
- SHA-512
- MAC(Message Authentication Code 消息认证码算法)
- HmacMD5
- HmacSHA1
- HmacSHA256
- HmacSHA384
- Hmac-SHA512
消息摘要
任何消息经过散列函数处理后,都会获得唯一的散列值,这一过程称为”消息摘要“。一般用MD5、SHA、或者MAC算法的数字指纹。 经MAC算法得到的摘要值也可以使用十六进制编码表示,其摘要值长度与参与实现的算法摘要值长度相同. 这里重点讲Hmac SHA256,他是传入data和key来进行摘要算法的。其中:
public static byte[] encodeHmacSHA256(byte[] data,byte[] key){
// 还原秘钥
SecretKey secretKey = new SecretKeySpec(key,"HmacSHA256");
// 实例化Mac
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
// 初始化Mac
mac.init(secretKey);
//执行消息摘要
mac.doFinal(data);
}
用途:
- 完整性校验 上游会传入原始数据与自定义拼接后的Sha256的值。根据原始数据和拼接规则做一次SHA256与传来值做对比,即可获知数据是否完整
- 密码加密 同样的原理,存入数据库的密码若是明文存储则安全性太低,一般都是MD5加密,将输入的密码进行同样散列算法计算和数据库中密码进行比较来判断密码是否输入正确。
- 接口过滤加密算法 JWT(JSON WEB TOKEN)
数字签名
MD5算法和SHA算法可以用碰撞算法强行破解。现在已经有很多网站提供MD5、SHA256的“解密”,通过大量的字典来推出原始串。所以现在一般用SHA256做个完整性验证,若要签名都用HmacSHA256算法。
Https的SSL
HTTPS = HTTP + SSL/TCP
SSL(Secure Socket Layer安全套接层)共有三个版本:SSL1.0、SSL2.0、SSL3.0。现在SSL3.0是主推的因此通常意义上提到的SSL/TLS协议值得是SSL3.0或TLS1.0网络传输层安全协议。
SSL/TLS 协议可分为两层:记录协议和握手协议。
- 记录协议(Record Protocol):建立在可靠的传输协议(如TCP)上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
- 握手协议(Handshake Protocol):建立在SSL记录协议之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密秘钥等。
CA证书
经常进入网站会说证书过期,其实就是CA证书过期,CA 是 PKI 系统中通信双方信任的实体,被称为可信第三方(Trusted Third Party,简称TTP)。 CA 证书,顾名思义,就是 CA 颁发的证书。 CA 的初始是为了解决上面非对称加密被劫持的情况,服务器申请 CA 证书时将服务器的“公钥”提供给 CA,CA 使用自己的“私钥”将“服务器的公钥”加密后(即:CA证书)返回给服务器,服务器再将“CA 证书”提供给客户端。一般系统或者浏览器会内置 CA 的根证书(公钥)
https证书在Nginx的nginx.conf中配置即可。网站上线可以用nmap进行安全扫描可以直接定位到服务器支持的协议和SSL/TlS版本
公钥基础设施
Java加密工具包
org.apache.commons.codec
apache的codec包里已经包含多种算法,开箱即用
Java API支持
- MessageDigest类可以构建MD5、SHA两种加密算法。
- Mac类可以构建HMAC加密算法
- CIpher类可以构建多种加密算法,如DES、AES、Blowfish对称加密算法
- Signature类可以用于数字签名和签名验证
- Certificate类可以用于操作证书
总结
- 摘要算法首推HmacSHA256
- 完整性校验用SHA256 和 MD5都可以
- 网关的出现也是为了统一鉴权
来源:oschina
链接:https://my.oschina.net/xlpapapa/blog/4293063