加解密技术在我们平日工作生活中应用随处可见、不可或缺。当前如火如荼的区块链技术的确权无信任实现的底层根基就是加解密技术。
因此,掌握常见加解密技术是非常重要的,也是程序员进入区块链行业的必备知识能力。
密码学体系庞大、标准规范不少,又加之一些编程语言的发展历史原因,容易令学习者陷入迷茫懵逼。例如java中的JCA、JCE、BC等历史缘由导致api繁杂,又如ASN、X509、PKIX、PKCS哗啦啦一堆标准,再如.cert,.cer,.crt,.key文件什么鬼......令入门者多少生畏。所以,学习的话,非常必要在关键时刻有人告诉些潜在的历史缘由,这样学习过程中才可以少些懵逼。(本人当时刚学习就是好多“知其然不知其所以然”的懵逼时候,然后自己google百度、查书才慢慢明晰其历史缘由。不过港真,真的比较浪费时间,而且疲惫不堪,严重打击学习激情)
本系列是本人学习加解密知识过程中的总结整理,希望能帮到大家一丢丢。本系列将会主要以Golang和java的代码案例对比、互通学习的形式讲解常见加解密知识,希望读者阅读后能快速掌握golang和java中加解密技术。
//updateby20190128
全书正在尾声, 此下为截图:
声明:本系列是一年前学习笔记后的总结,当日学习过程中部分笔记片段直接摘录自网络或者来源于书籍,如今无法一一找到源地址。故侵删!
推荐阅读
推荐书籍《 Java加密与解密的艺术》作者梁栋,强烈推荐。此书已经帮我们梳理好知识脉络,可使我们学习少些懵逼困惑!
一.不可不知的密码学历史
1.密码学需要基于数学的启发、柯克霍夫原则
二.不可不知的行业标准
1.ASN.1的介绍
(1)DER,PEM编码规则
2.PKI体系介绍
3.X.509介绍
(1)数字证书规范定义
4.PKCS系列标准
(1)公私钥规范定义
5..cert,.cer,.crt,.key常见文件格式后缀的理解
三.Java安全须知
1.JCA和JCE必知的历史细节!!
2.Java的SPI机制了解
3.加密服务提供者-Provider接口及BC中的各功能包介绍(BCJar包时有多个类型的,下载请注意!)
4.引擎类介绍
四.哈希算法 梳理和案例
1.消息摘要与消息认证码MAC
2.MD2,MD5,SHA1,SHA256,SHA383,SHA512介绍
(1)常用实现算法
3.局部敏感哈希算法-LSH
五.对称加密算法梳理和案例
1.DES,3DES,AES,原理介绍及代码案例
(1)随机数种子、随机数在密钥生成的作用
(2)EBC,CBC分组加密模式;默认地,分组大小由密钥bit数量指定。
(3)padding填充模式:NoPadding和分组大小的非整数倍 的报错重现
2.Blowfish,RC2,RC4简单介绍
3.PBE算法简单介绍
六.非对称加密 梳理和案例
1.RSA及java和Golang代码案例
(1)RSA明文长度、密钥长度等不可不知的知识
(2)分组加密模式和填充模式
2.ECC及java和Golang代码案例
(1)曲线选择与golang和java中的对比
3.DH-密钥交换算法
七.数字签名和数字证书 梳理和案例
1.DSA
2.RSADSA及java和Golang代码案例
3.ECDSA及java和Golang代码案例
八.应用场景
1.HTTPS 和DH,非对称加密,对称加密
2.SSL和TLS
3.单向认证 和 双向认证
4.密钥和证书管理-Java中的Keytool
5.密钥和证书管理-OPENSSL快速入门-略
6.CSR制作、签名、生成数字证书的实践
(1)工具网站、keytool、openssl生成CSR文件 和 解析文件
(2)Csr签名和生成证书