密码学 加密模式、填充模式与消息摘要

326 阅读3分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

加密模式 与 填充模式

加密模式

ECB

ECB:Electronic Codebook,电子密码本,需要加密的消息按照块密码的大小被分成数个块,并对每个块进行独立加密。

  • 优点:可以并行处理数据
  • 缺点:同样的原文生成同样的密文,不能很好的保护数据

CBC

CBC:Cipher Block Chaining,密码块链接,每个明文块先与前一个密文块进行异或后再进行加密,每个密文快都依赖于它前面的所有明文块。

  • 优点:同样的原文生成的密文不同
  • 缺点:串行处理数据

填充模式

当需要按块处理数据,数据长度不符合块处理需求时,按照一定的方法填充满块长的规则。

NoPadding

  • 不填充
  • 在 DES 算法下,要求原文长度必须是 8byte 的整数倍
  • 在 AES 算法下,要求原文长度必须是 16byte 的整数倍

PKCS5Padding

数据块的大小为 8 位,不够就补足。

Tips

  • 在 Java 中,默认情况下加密模式与填充方式为:ECB/PKCS5Padding

  • 若使用 CBC 模式,则初始化 Cipher 对象时需新增参数(储存每次加密时的异或值):

    IvParameterSpec iv = new IvParameterSpec(key.getBytes())

消息摘要(散列函数)

散列函数

散列函数,也称作哈希函数,消息摘要函数,单向函数或者杂凑函数。散列函数主要用于验证数据的完整性。通过散列函数,可以创建消息的“数字指纹”,消息接收方可以通过校验消息的哈希值来验证消息的完整性,防止消息被篡改。散列函数具有以下特性:

  1. 散列函数的运算过程是不可逆的,这个特性称为散列函数的单向性
  2. 对于一个已知的消息及其散列值,要找到另外一个消息使其获得相同的散列值是不可能的,这个特性称为散列函数的弱碰撞性。这个特性可以用来防止消息伪造。
  3. 任意两个不同消息的散列值一定不同。
  4. 对原始消息长度没有限制。

消息摘要

  • 消息摘要(Message Digest)又称为数字摘要(Digital Digest)
  • 它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向 Hash 加密的函数对消息进行作用而产生
  • 数字摘要常用于确保文件或值的安全(不被篡改)

常见算法

  1. MD5:消息摘要算法,摘要结果 16 个字节(16 进制下 32 字节)
  2. SHA1:安全散列算法,摘要结果 20 个字节(16 进制下 40 字节)
  3. SHA256:安全散列算法,摘要结果 32 个字节(16 进制下 64 字节)
  4. SHA512:安全散列算法,摘要结果 64 个字节(16 进制下 128 字节)
  5. MAC:消息认证码算法