我在golang中找到了从71614065到ECB中解密AES-128数据的代码片段(注意,块大小为16字节):
package main
import (
"crypto/aes"
)
func DecryptAes128Ecb(data, key []byte) []byte {
cipher, _ := aes.NewCipher([]byte(key))
decrypted := make([]byte, len(data))
size := 16
for bs, be := 0, size; bs < len(data); bs, be = bs+size, be+size {
cipher.Decrypt(decrypted[bs:be], data[bs:be])
}
return decrypted
}我试图在网上搜索,但无法获得完整的代码并理解它。
发布于 2022-04-06 09:46:34
首先,请记住,欧洲央行不安全不能用于真正的加密。话虽如此,下面是代码逐行所做的工作:
cipher, _ := aes.NewCipher([]byte(key))这将返回一个具有执行AES加密/解密的方法的新对象,该对象使用给定的键。
decrypted := make([]byte, len(data))这将分配空间来保存解密结果。长度与输入的长度相同。
size := 16这是AES密码的块大小,以字节为单位。我们也可以在这里写size := cipher.BlockSize()。输入的长度必须是16个字节的倍数。
for bs, be := 0, size; bs < len(data); bs, be = bs+size, be+size { ... }这会在输入中的16个字节块上迭代。第一个块有start bs = 0和end be = size,我们只是重复地向bs和be添加16以获得所有其他块。
cipher.Decrypt(decrypted[bs:be], data[bs:be])这使用我们在开始时创建的cipher对象来解密单个块。输入为data[bs:be],输出存储在decrypted[bs:be]中。循环完成后,片decrypted包含解密的明文。
https://stackoverflow.com/questions/71614168
复制相似问题