我试图在 go 中加密一些数据,但它几乎不是正确的 cipher.BlockSize
。
是否有添加填充的“内置”方式,或者我应该使用函数手动添加它?
现在这是我的解决方案:
// encrypt() encrypts the message, but sometimes the
// message isn't the proper length, so we add padding.
func encrypt(msg []byte, key []byte) []byte {
cipher, err := aes.NewCipher(key)
if err != nil {
log.Fatal(err)
}
if len(msg) < cipher.BlockSize() {
var endLength = cipher.BlockSize() - len(msg)
ending := make([]byte, endLength, endLength)
msg = append(msg[:], ending[:]...)
cipher.Encrypt(msg, msg)
} else {
var endLength = len(msg) % cipher.BlockSize()
ending := make([]byte, endLength, endLength)
msg = append(msg[:], ending[:]...)
cipher.Encrypt(msg, msg)
}
return msg
}
最佳答案
查看Package cipher看起来您可能必须自己添加填充,请参阅 PKCS#7 padding .
本质上是添加所需的填充字节,每个字节的值是添加的填充字节数。
请注意,您需要始终如一地添加填充,这意味着如果要加密的数据恰好是 block 大小的倍数,则必须添加整个填充 block ,因为无法从数据中知道填充是否有不管是否添加,试图超越它是一个常见的错误。考虑如果最后一个字节是0x00,那是填充还是数据?
关于encryption - 在 golang 中向 byte slice 添加填充的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39280574/