您的位置:首页 > 编程语言 > Java开发

java加密与解密的艺术 -- 笔记

2016-02-15 14:59 288 查看
第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的方法。标准!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: