本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
加密模式 与 填充模式
加密模式
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())
消息摘要(散列函数)
散列函数
散列函数,也称作哈希函数,消息摘要函数,单向函数或者杂凑函数。散列函数主要用于验证数据的完整性。通过散列函数,可以创建消息的“数字指纹”,消息接收方可以通过校验消息的哈希值来验证消息的完整性,防止消息被篡改。散列函数具有以下特性:
- 散列函数的运算过程是不可逆的,这个特性称为散列函数的单向性。
- 对于一个已知的消息及其散列值,要找到另外一个消息使其获得相同的散列值是不可能的,这个特性称为散列函数的弱碰撞性。这个特性可以用来防止消息伪造。
- 任意两个不同消息的散列值一定不同。
- 对原始消息长度没有限制。
消息摘要
- 消息摘要(Message Digest)又称为数字摘要(Digital Digest)
- 它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向 Hash 加密的函数对消息进行作用而产生
- 数字摘要常用于确保文件或值的安全(不被篡改)
常见算法
- MD5:消息摘要算法,摘要结果 16 个字节(16 进制下 32 字节)
- SHA1:安全散列算法,摘要结果 20 个字节(16 进制下 40 字节)
- SHA256:安全散列算法,摘要结果 32 个字节(16 进制下 64 字节)
- SHA512:安全散列算法,摘要结果 64 个字节(16 进制下 128 字节)
- MAC:消息认证码算法