我有一个解密密文的程序(我不控制它),使用的例子来自go docs:https://pkg.go.dev/crypto/cipher#NewCBCDecrypter
问题出在这一部分:
// If the original plaintext lengths are not a multiple of the block
// size, padding would have to be added when encrypting, which would be
// removed at this point. For an example, see
// https://tools.ietf.org/html/rfc5246#section-6.2.3.2
我原来的明文长度确实 * 不是 * 块大小的倍数,所以我需要去掉填充,怎么做呢?如果我不去掉填充,我不能解压缩纯文本,因为https://github.com/golang/go/issues/47809的去维护人员明确表示,是非常严格的gzip符合性的目的。目前我的解决方法是调用gunzip
作为shell命令,它可以成功地解压缩纯文本(忽略尾部填充)。
我检查了IETF链接,但没有找到任何示例(或者至少没有Go示例)
1条答案
按热度按时间jckbn6z71#
事实证明,加密器和解密器必须事先就填充方案达成一致,在我的例子中,加密器使用的是下面描述的填充方案:https://www.rfc-editor.org/rfc/rfc5652#section-6.3
换句话说,如果有一个字节的填充,则用
0x01
填充明文,如果有2个字节的填充,则用0x02 0x02
填充明文,以此类推。例如,假设块大小为4字节,下面是一些明文示例:
因此,我能够使用以下命令远程填充明文:
另请参阅:https://crypto.stackexchange.com/a/2805