第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的方法。标准!