第1-3章:
这几章主要介绍了一些为什么要加密,加密的历史原因以及演变过程,并介绍了几种常见的加密算法,画出了对称与非对称加密在实际应用中的思维导图。
(了解到加密技术分为对称加密,非对称加密,单向加密(散列加密))
(一般单向加密用于提供数据完整性的校验,使用到的算法有MD5,SHA1等Hash算法),(消息认证,鉴权等多用非对称加密算法,通过使用数字证书,公钥私钥来实现)
另外,JCA 是提供基础的加密框架,类似于一个工厂,生产密钥产生器,数字证书,签名等基础设施。JCE 是JCA的扩展,也就是加工厂,拿到JCA的基础设施后,放入一些乱七八糟的算法,让产出的产品具有保密性。JSSE 是负责在网络传输中加密的,是基于SSL的。
JCE 最后封装成了一套接口,作为安全提供者接口。据说,它的精髓就是,引擎和算法。一个算法是一个引擎的具体实现,例如(provider + rsa算法)
↑ 这里面使用到了提供者模式。↑ 即,基础功能提供者只需要关注提供哪种服务(加密,解密,or anyone else),不需要关心算法是否又推层出新了。
(据书里说,java.security.Provider 和 java.security.Security 这两个类是JCE的核心,于是我去翻了翻API)……基本看不到什么有意思的。
于是人书里继续说了,其实真的要实现加密解密,还要用javax.crypto里的功能。好吧,这样就和我见过的匹配上了。所以上面说的核心只是说掌握如何操作,这里的核心是干实事,基层核心。
两个重要的,私钥的规范接口实现类是
PKCS8EncodedKeySpec
公钥的规范接口实现类是
X509EncodedKeySpec
意思就是说,你用这两个整出来的公钥和私钥才是经过国际认证的正品。憋整些山寨货,行不通的。
第4-6章
终于来了点干货,其实也没说啥,就介绍了消息摘要什么的。
消息摘要主要分为只提供消息摘要进行文件完整性校验的,以及除了消息摘要,还提供密钥进行校验的。
只提供消息摘要的话一般实际应用中直接给MD5或者SHA的数字指纹就行了。
在某些场景中只验证完整性是不行的,还要防止数据和摘要全部被篡改和仿冒,比如攻击者劫持了你的消息和你的摘要,并将其全部替换,那么接收者就是用替换后的摘要去验证替换后的数据,结果虽然一致但是已经不是发送者发出的东西了。简而言之就是,狸猫换太子还换了个奶妈,全部被掉包了。
所以,发送者与接收者私下还有一个密钥,要使用这个密钥来校验这个文件是不是原始的那只。常用Mac算法。
另外,如果使用java自带的security包太麻烦了,最好使用apache-common-codec里的工具,digestUtils和HmacUtils等。。最好使用+hex的方法。标准!