密码学 加密算法

密码学相关概念

明文、密文、密钥、加密、解密

  • 明文:指没有经过加密的信息/数据。
  • 密文:明文被加密算法加密之后,会变成密文,以确保数据安全。
  • 密钥:是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。
  • 加密:将明文变成密文的过程。
  • 解密:将密文还原为明文的过程。

    对称加密、非对称加密

  • 对称加密:加密和解密使用相同密钥的加密算法。

image.png

  • 非对称加密:非对称加密算法需要两个密钥(公开密钥和私有密钥)。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。

image.png

公钥、私钥

  • 公钥与私钥是成对存在的密钥,如果用公钥对数据进行加密,只有用对应的私钥才能解密。
  • 其实,公钥就是公开的秘钥,私钥就是要私自保存好的秘钥。
  • 非对称加密算法需要有一对公私钥~

    假设有一个文件,用字母a加密,只有字母b才能解密;或者用b加密,只有a才能解密,那么a和b就是一对公私钥。如果密钥a公开,密钥b就要私自保存好啦,这时候密钥a就是公钥,密钥b就是私钥。相反,如果b公开,a就要保存好,这时候呢,秘钥b就是公钥,秘钥a就是私钥。

常见加密相关算法简介

  • 消息摘要算法
  • 对称加密算法
  • 非对称加密算法
  • 国密算法

    消息摘要算法

  • 相同的明文数据经过相同的消息摘要算法会得到相同的密文结果值。

  • 数据经过消息摘要算法处理,得到的摘要结果值,是无法还原为处理前的数据的。
  • 数据摘要算法也被称为哈希(Hash)算法或散列算法。
  • 消息摘要算法一般用于签名验签。

消息摘要算法主要分三类:MD(Message Digest,消息摘要算法)、SHA(Secure Hash Algorithm,安全散列算法)和MAC(Message Authentication Code,消息认证码算法)。
image.png

MD系列算法

MD(Message Digest,消息摘要算法),包括MD2,MD4,MD5。

  • MD2,MD4,MD5 计算的结果都是是一个128位(即16字节)的散列值,用于确保信息传输完整一致。
  • MD2的算法较慢但相对安全,MD4速度很快,但安全性下降,MD5则比MD4更安全、速度更快。
  • MD5被广泛应用于数据完整性校验、数据(消息)摘要、数据加密等。
  • MD5,可以被破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞攻击,因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

获取字符串的MD5值

  1. public class MD5Test {
  2. public static void main(String[] args) throws UnsupportedEncodingException {
  3. String s = "123";
  4. byte[] result = getMD5Bytes(s.getBytes());
  5. StringBuilder stringBuilder = new StringBuilder();
  6. for (byte temp : result) {
  7. if (temp >= 0 && temp < 16) {
  8. stringBuilder.append("0");
  9. }
  10. stringBuilder.append(Integer.toHexString(temp & 0xff));
  11. }
  12. System.out.println(s + ",MD5加密后:" + stringBuilder.toString());
  13. }
  14. private static byte[] getMD5Bytes(byte[] content) {
  15. try {
  16. MessageDigest md5 = MessageDigest.getInstance("MD5");
  17. return md5.digest(content);
  18. } catch (NoSuchAlgorithmException e) {
  19. throw new RuntimeException(e);
  20. }
  21. }
  22. }

运行结果:

  1. 123,MD5加密后:202cb962ac59075b964b07152d234b70

ShA系列算法

SHA(Secure Hash Algorithm,安全散列算法),包括SHA-0、SHA-1、SHA-2(SHA-256,SHA-512,SHA-224,SHA-384等)、SHA-3。它是在MD算法基础上实现的,与MD算法区别在于「摘要长度」,SHA 算法的摘要「长度更长,安全性更高」

  • SHA-0发布之后很快就被NSA撤回,因为含有会降低密码安全性的错误,它是SHA-1的前身。
  • SHA-1在许多安全协议中广为使用,包括TLS、GnuPG、SSH、S/MIME和IPsec,是MD5的后继者。
  • SHA-2包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。它的算法跟SHA-1基本上相似,目前还没有出现明显弱点。
  • SHA-3是2015年正式发布,由于对「MD5出现成功的破解」,以及对SHA-0和SHA-1出现理论上破解的方法,SHA-3应运而生。它与之前算法不同的是,它是可替换的加密散列算法。

SHA-1、SHA-2(SHA-256,SHA-512,SHA-224,SHA-384)等算法是比较常用的,跟MD5的对比如下

算法类型 摘要长度(bits) 最大输入消息长度(bits) 碰撞攻击(bits) 性能示例(MiB/s)
MD5 128 无限 ≤18(发现碰撞) 335
SHA-1 160 2^64 − 1 <63(发现碰撞) 192
SHA-224 224 2^64 − 1 112 139
SHA-256 256 2^64 − 1 128 139
SHA-384 384 2^128 − 1 192 154
SHA-512 512 2^128 − 1 256 154

MAC系列算法

MAC算法 MAC(Message Authentication Code,消息认证码算法),是带密钥的Hash函数。输入密钥和消息,输出一个消息摘要。它集合了MD和SHA两大系列消息摘要算法。

  • MD 系列算法: HmacMD2、HmacMD4 和 HmacMD5 ;
  • SHA 系列算法:HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384 和 HmacSHA512 。

    对称加密算法

    加密和解密使用「相同密钥」的加密算法就是对称加密算法。常见的对称加密算法有AES、3DES、DES、RC5、RC6等。
    image.png

    DES

    数据加密标准(英语:Data Encryption Standard,缩写为 DES)是一种对称密钥加密块密码算法。DES算法的入口参数有三个:Key、Data、Mode。

  • Key: 7个字节共56位,是DES算法的工作密钥;

  • Data: 8个字节64位,是要被加密或被解密的数据;
  • Mode: 加密或解密。

    3DES

    三重数据加密算法(英语:Triple Data Encryption Algorithm,又称3DES(Triple DES),是一种对称密钥加密块密码,相当于是对每个数据块应用三次数据加密标准(DES)算法。

    AES

    AES,高级加密标准(英语:Advanced Encryption Standard),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。

  • 采用对称分组密码体制,密钥长度为 128 位、 192 位、256 位,分组长度128位

  • 相对于DES ,AES具有更好的 安全性、效率 和 灵活性。

    非对称加密算法

    非对称加密算法需要两个密钥:公钥和私钥。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有用对应的私钥才能解密。主要的非对称加密算法有:RSA、Elgamal、DSA、D-H、ECC。
    image.png

    RSA算法

  • RSA加密算法是一种非对称加密算法,广泛应用于加密和数字签名

  • RSA算法原理:两个大素数的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
  • RSA是被研究得最广泛的公钥算法,从提出到现在,经历了各种攻击的考验,普遍认为是目前最优秀的公钥方案之一。

    DSA

  • DSA(Digital Signature Algorithm,数字签名算法),也是一种非对称加密算法。

  • DSA和RSA区别在,DSA仅用于数字签名,不能用于数据加密解密。其安全性和RSA相当,但其性能要比RSA好。

    ECC 算法

  • ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学),基于椭圆曲线加密。

  • Ecc主要优势是,在某些情况下,它比其他的方法使用更小的密钥,比如RSA加密算法,提供相当的或更高等级的安全级别。
  • 它的一个缺点是,加密和解密操作的实现比其他机制时间长 (相比RSA算法,该算法对CPU 消耗严重)。

    国密算法

    国密即国家密码局认定的国产密码算法。为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,即SM1,SM2,SM3,SM4等国密算法。
    image.png

    SM1

  • SM1,为对称加密算法,加密强度为128位,基于硬件实现。

  • SM1的加密强度和性能,与AES相当。

    SM2

  • SM2主要包括三部分:签名算法、密钥交换算法、加密算法

  • SM2用于替换RSA加密算法,基于ECC,效率较低。

    SM3

  • SM3,即国产消息摘要算法。

  • 适用于商用密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成。

    SM4

  • SM4是一个分组算法,用于无线局域网产品。

  • 该算法的分组长度为128比特,密钥长度为128比特。
  • 加密算法与密钥扩展算法都采用32轮非线性迭代结构。
  • 解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
  • 它的功能类似国际算法的DES。