密码学常用术语
- 明文:待加密信息
- 密文:经过加密后的明文
- 加密:明文转为密文的过程
- 加密算法:明文转密文的转换算法
- 加密密钥:通过加密算法进行加密操作用的密钥。
- 解密:将密文转为明文的过程。
- 解密算法:密文转为明文的过程。
- 解密密钥:铜管解密算法进行解密操作用的密钥
通俗而言
- 可以把“加密”和“解密”理解为某种【互逆的】数学运算。就好比“加法和减法”互为逆运算、“乘法和除法”互为逆运算。
- “加密”的过程,就是把“明文”变成“密文”的过程;反之,“解密”的过程,就是把“密文”变为“明文”。在这两个过程中,都需要一个关键的东东——叫做“密钥”——来参与数学运算
对称密钥加密
对称密钥加密(英语:Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。实务上,这组密钥成为在两个或多个成员间的共同秘密,以便维持专属的通讯联系
通俗的解释
比如带密码 zip 的压缩包,每次都是同一个密码,加密和解密都是用一个秘密,那么这样的情况可以理解成对称加密。
常见的对称加密算法
常见的对称加密算法有 DES、3DES、AES、Blowfish、IDEA、RC5、RC6、Base64
对称加密的速度比公钥加密快很多,在很多场合都需要对称加密。
代码实现 Base64 加密和解密
先通过 Maven 引入 jar 包
1 | <!--加密解密 jar--> |
代码实现
1 | package com.doity.encodeanddecode; |
运行结果
1 | 原始字符串:Hi,I'm ARNO |
使用场景
非对称加密
公开密钥加密(英语:public-key cryptography,又译为公开密钥加密),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。
常见的公钥加密算法
RSA、ElGamal、背包算法、Rabin(RSA的特例)、迪菲-赫尔曼密钥交换协议中的公钥加密算法、椭圆曲线加密算法(英语:Elliptic Curve Cryptography, ECC)。
优点
与对称密钥加密相比,优点在于无需共享的通用密钥,解密的私钥不发往任何用户。即使公钥在网上被截获,如果没有与其匹配的私钥,也无法解密,所截获的公钥是没有任何用处的。
通俗的解释
加密时用一个密钥、解密时用另外一个密钥。
代码实现
1 | package com.doity.encodeanddecode; |
运行结果
1 | 创建共钥成功! |
使用场景
补充
密码常用术语 2
密码分析:接货密文者试图通过分析截获的密文从而推断出原来的明文或密钥的过程。
主动攻击:攻击者非法入侵密码系统,采用伪造、修改、删除等手段向系统注入假消息进行欺骗。(对密文具有破坏作用)
被动攻击:对一个保密系统采取截获密文并对其进行分析和攻击(对密文没有破坏作用)
密码体制:由明文空间、密文空间、密钥空间、加密算法和解密算法 5 部分构成。
密码常用术语 3
密码协议:也称安全协议,指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务。
密码系统:指用于加密、解密的系统
柯克霍夫原则:数据的安全基础密钥而不是算法的保密。及系统的安全取决于密钥,对密钥保密,对算法公开。——现代密码学设计的基本原则。
参考资料
- JAVA 实现 Base64 加密 http://www.imooc.com/learn/285
- JAVA实现对称加密 http://www.imooc.com/view/287
- JAVA实现非对称加密 http://www.imooc.com/view/288
- 扫盲 HTTPS 和 SSL/TLS 协议[1]:背景知识、协议的需求、设计的难点
- Base64 - 维基百科 https://zh.wikipedia.org/wiki/Base64
- 对称密钥加密 - 维基百科 https://zh.wikipedia.org/对称密钥加密
- 非对称加密 - 维基百科 https://zh.wikipedia.org/非对称加密