请仔细阅读:
- 当 "IV 初始化向量" 填写为空时,服务端自动填充 16 位伪随机字节串。因为 iv 是 byte 数据类型,所以在结果中转换为(肉眼可识别):十六进制字符串。
- 如何把十六进制转换为二进制?比如:您可以通过 PHP 函数 hex2bin 转换为二进制值。您可以通过 Go 函数 strconv 转换为二进制值。
- 该工具会自动删除 “内容、iv、秘钥” 前后多余的空格,这个是基础功能了。
- 在 Go 语言中 AES 秘钥的长度(16/24/32)决定不同的加密强度。以CBC加密模式举例,例如:秘钥长度16字节(128位密钥),对应 AES-128-CBC;秘钥长度24字节(192位密钥),对应 AES-192-CBC;秘钥长度32字节(256位密钥),对应 AES-256-CBC。
- Go 1.24 标记 CFB 、OFB 模式为废弃(deprecated),不建议应用新项目,被弃用的根本原因是存在严重的安全与设计缺陷。
- 站长发现很多“在线工具”、“技术博客”对 AES CBC 系列加密、解密,漏掉了IV参数,这是错误的!也没有把CBC数据填充讲明白!
关于 AES-CBC 数据填充算法,本工具只提供一种 PKCS#7 说明如下:
NoPadding
顾名思义,NoPadding 就是不填充的意思。其缺点是要求明文必须是16字节的整数倍。业内没人会使用。
PKCS7Padding (推荐)
言简意赅,就是缺几补几。例如:数据体1234567890AA差4补齐16字节,则在数据末尾增补的内容是数字4。
PKCS5Padding
准确来讲:AES加密没有PKCS#5。AES的块大小是16bytes,而PKCS#5只能用于8bytes。
ZeroPadding
数据长度不对齐时使用0填充。仅适合以\0结尾的数据,缺点没办法区分真实数据与填充数据。业内没人会使用。