您的位置 首页 java

Java安全,从历史开始讲起

密码学 是一个很久远的学问。主要分为三个阶段:古典密码学、近代密码学、现代密码学。

Java安全,从历史开始讲起


古典密码学

古典密码学的核心原理是替换法和移位法。

替换法 是使用固定的信息,将原文替换成密文。例如:原文bee,将b替换成w,e替换成p,密文变成wpp。

替换法的加密方式有两种,一种是单表替换,一种是多表替换。单表替换指的是原文和密文使用的是同一张表。

例如:abced-swtrp。

多表替换表示有多张表,来对原文和密文进行对比。

例如:表单1:abcde-swtrp 表单2:abcde-chfhk 表单3:abcde-jftou

原文:bee 秘钥:312 密文:fpk

移位法 是按照字母在字母表上面的位置,进行移动。

移位法应用:凯撒加密,例如:abcde往后移动3位 defgh

Java安全,从历史开始讲起

破解方式

频率分析法:对密文字母出现的频率进行分析。因为在单表代换密码中,针对于英语这种字母基本的书面语言,不同的字母或字母组合出现的频率各不相同,且对于以这种语言写的任意一段文本,都具有大致相同的特征字母分布;而每个字母在重复出现时总是以相同的方式加密,这就为判断秘钥提供了一个很好的解决思路。比如,在正常书写中,字母E出现的频率很高,而X出现的较少,如果在一个密文中X大量出现,那便是在向密码破译者暗示X替换E。


近代密码学

近代密码学的核心原理与古典密码学一样,也是替换法和移位法。但是近代密码学发明了机器加密。

Java安全,从历史开始讲起

恩尼格码密码机

后来,恩尼格码密码机被人工智能之父 图灵 给破解了。图灵破解了恩尼格码密码机后,就进入到了现代密码学阶段。


现代密码学

现代密码学加密主要分为三部分:散列函数、对称加密、非对称加密,以及引申出来的数字签名、 数字证书

消息摘要 (哈希函数、散列函数、 数字摘要 )的作用是防止篡改,保证文件安全。有MD5、SHA-1、SHA-256、SHA-512这些加密方式。

MD5 :128比特位,SHA-1:160比特位

Java 安全库中关于消息摘要的关键类是MessageDigest。通过使用MessageDigest,我们可以生成一个文件的MD5值、SHA-1值、SHA-256值、SHA-512值。

对称加密 指的是加密和解密使用同一把秘钥。对称加密的核心原理有流加密和块加密两种。流加密是对每个元素加密,块加密是先对元素分块,再对块加密。

对称加密的特点是加密速度快,密钥不能泄露,如果在编码表上面找不到对应的字符则会出现乱码,一般需要结合base64一起使用。

在Java并发库中使用Cipher类来实现对称加密。

对称加密有 DES 和AES两种,都是美国军方提出的加密方式。DES的秘钥必须是8个字节,AES是对DES的加强,秘钥必须是16个字节。

对称加密还有两个关键要素,一个是加密模式,另一个是填充模式。

加密模式有ECB和CBC两种。

ECB(Electronic codebook,电子密码本)是把一段文本分拆成若干个块,使用同一个key,对每一块分别进行加密,然后再组合到一起。ECB的优点是快,缺点是使用同一个key,所以不安全。

Java安全,从历史开始讲起

ECB加密模式

CBC(Cipher-block chaining,密码块链接)在进行加密的时候,会取决于前面的iv向量(Initialization Vector),把前面的向量进行异或处理,后面的明文进行加密的时候,会一直依赖于前面的加密key。CBC模式的优点是很安全,但是速度慢。

Java安全,从历史开始讲起

CBC机密模式

填充模式是说当需要按块处理的数据,数据长度不符合块处理需求时,按照一定的方法填充块长的规则。有NoPadding和PKCS5Padding两种。

NoPadding:不填充,在DES加密算法下,要求原文长度必须是8字节的整数倍;在AES 加密算法 下,要求长度必须是16字节的整数倍。

PKCS5Padding:数据块的大小为8位,不够就补充。

没有写填充模式和加密模式的话,默认是DES/ECB/PKCS5Padding。

非对称加密 (又叫做现代加密算法):公钥和 私钥 是一对,叫做秘钥对。公钥加密,私钥解密;或者私钥加密,公钥解密。

非对称加密主要是RSA算法和ECC算法。

KeyPairGenerator:秘钥对生成器。

非对称加密在Java安全库中使用的也是Chiper类。

数字签名 :只有信息的发送者,才能产生别人无法伪造的一段数字串,类似于写在纸上的签名,无法篡改。在Https协议中,服务端会使用私钥对发送的内容进行数字签名。类似于对文件进行MD5操作。客户端拿到服务器发来的内容和数字签名后,可以通过数字签名校验来验证内容是否被篡改。

数字证书: 为了公钥传输的安全性,有专门的组织CA(Certificate Authority)认证中心来颁布数字证书,数字证书中包含网站的公钥。

Java安全,从历史开始讲起

客户端的每个系统中自出厂依赖都集成了所有的正规证书颁发中心的根证书,所以对于合法证书,系统是可以验证通过的。

Base64 也是现代密码学中的内容,不过它不是加密算法,而是可读性算法。Base64目的不是为了保护数据,而是为了可读性。

Base64是由64个字符组成,大写A-Z,小写a-z,数字0-9,两个符号+和/。它的原理是以3个字节为一组,一个字节是8位,一共是24位,base64把三个字节转换成4组,每组6位,一个字节是8位,缺少的2位在高位进行补齐,即在高位补0。这样的好处是,base64取后面6位,前面去掉2位,可以把base64控制在0-63之间。在base64中,需要设置一共3个字节为一组,如果在输出的时候不够3个字节,就需要使用=进行补齐。

除了Base64之外,还有Base58。Base58一般用于比特币里面的编码方式。Base58中没有数字0,没有字母o,没有大写字母I,没有小写字母i,也没有+和/。

文章来源:智云一二三科技

文章标题:Java安全,从历史开始讲起

文章地址:https://www.zhihuclub.com/188069.shtml

关于作者: 智云科技

热门文章

网站地图