【Java加密与解密的艺术】 读书心得
背景
现在项目中加密与解密的方式很多,很早就想整理一下Java中加密与解密的方式,读完<<Java加密与解密的艺术>>一书.借此机会梳理一下这方面的知识点
知识点
一.安全技术目标
安全技术目标主要包含以下五个方面:
1,保密性(Confidentiality)
保密性也被称作机密性.保密性确保数据仅能被合法的用户访问,即数据不能被未授权的第三方使用
2.完整性(Integruty)
完整性主要确保数据只能由授权方或以授权的方式进行修改,即数据在传输过程中不能被未授权方修改
3.可用性(Availability)
可用性主要确保所有数据仅在适当的时候可以由授权方访问
4.可靠性(Reliability)
可靠性主要确保雄能在规定条件下,规定时间内,完成规定的功能时具有稳定的概率
5.抗否认性(Non-Repudiation)
抗否认性也称作抗抵赖性,主要确保发送方与接收方在执行各自操作后,对所做的操作不可否认
除此之外,计算机网络信息系统的其他安全技术还包括:
可控性
可审查性
认证
访问控制等
二. 网络模型
OSI七层模型
OSI参考模型是由国际化标准组织制定的 开放式通信系统 互联网参考模型(Open System Interconnection Reference Model)
物理层-数据链路层-网咯层-传输层-会话层-表示层-应用层
TCP/IP四层协议
网络接口层-网络层-传输层-应用层
三.霍克霍夫原则:
公开算法而不公开密钥
四.常用的加密算法的说明
1.BASE64-电子邮件传输算法
注意:Base64算法主要用于解决电子邮件传输问题,早期的邮件传输只支持ASCII码字符,如果非ASCII码字符传输可能就会出现乱码,这就是BASE64算法的由来
BASE简介:
BASE64是基于64个有效字符对数据进行编码,BASE64算法并不是一个加密算法,只能算是加密算法的一个分支
URLBASE64算法的由来:
为了能在http的get请求中传递2进制数据,因此有了URLBASE64算法,将+和/进行了替换,
2.消息摘要算法-验证信息的完整性
消息摘要算法又称为散列算法,其核心在于散列函数的单向性,即通过散列函数可以获得对应的散列值,但不可以通过该散列值反推出其原始信息,这是消息摘要算法的的安全性的根本所在
消息摘要算法主要包含:
MD(消息摘要算法), SHA(安全散列算法), HMAC(消息认证码算法)共三大系列,常用语验证数据的完整性,是数字签名的的核心算法
MD算法:
包含MD2 MD4 MD5
SHA算法
包含SHA1 SHA124 SHA256等等
SHA 安全散列算法,被广泛认可为MD5算法的继承者
MAC-消息认证码算法
消息认证码算法是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加入了密钥
3.对称加密算法
AES,DES RC
对于大多数堆成加密算法而言,解密算法是加密算法的逆运算,加密密钥和解密密钥相同
AES是DES算法的升级,解决了DES算法的低效(密钥较短,处理速度慢的问题)
AES算法的优点:
密钥建立时间段,灵敏性好,内存需求低
4.非对称加密算法
RSA.DSA
非对称加密与对称加密算法的主要差别在于非对称加密算法用于加密和解密的密钥不相同,分为公钥和私钥,公钥和私钥成对存在
非对称加密的优点:
解决了对称加密算法密钥分配的问题,并极大提高了算法的安全性,常用于B2C或者B2B应用
非对称加密的缺点:
解密时间长,
5.对称加密与非对称加密相结合:
实现:
使用对称加密算法为数据加密/解密,使用公钥和私钥为对称加密算法密钥加密/解密,使用对称加密算法的高校性,加上非对称加密算法的密钥管理,整体提高加密系统的安全性
6.数字签名
介绍:
数字签名算法可以看做是一种带有密钥的消息摘要算法,并且这种密钥包含了公钥和私钥。也就是说,数字签名算法是非对称加密算法和消息摘要算法的结合体。
优点:
1.验证数据完整性
2.认证数据来源
3.抗否认的作用
实现:
消息摘要算法(MD5/SHA/HMAC) + 非对称加密算法
通常是先使用消息摘要算法对原始消息做摘要处理,然后再使用私钥,对摘要值做签名处理;验证签名时,则使用公钥验证消息的摘要值。
例如:支付宝支付时回调/预支付