AES-256-CTR在果朗解密



我很难在Golang 中使用AES-256-CTR解密有效载荷

格式:

A zero IV.
Not padded.

输入:

func main() {
encryptedKey := []byte{196, 231, 38, 149, 234, 51, 142, 186, 230, 214, 96, 243, 229, 153, 103, 74, 117, 241, 237, 135, 91, 170, 216, 167, 235, 154, 180, 28, 125, 48, 82, 44}
encryptedData := "bj4hUUJtwIZJnnGYO+04JpIxf1Omnsrq+ilLv+eQXSEbvsEKgD9BZ0cnxGBrvd4KHeyHkoiZZbObDkZemFtQkgo0jw1AtscTv4HSIz9OeOFZmNjjA724dA8oyuHY8WWlFddXcArqv4R5a9DO2Qs4e9sk3KIRYn4OJH//lNi8t111J//wcsSTvuer+EO9XeQIZHsZ4sr+fhdU1Jxz7Z1KOM6c2MGuXAqfKj/ebn01XA/LgnaDO8xZ+k7vs19WY0pH33HM0K5K1C+XUVaRGhUtFt2BDgnG5T/MPIyVlfUpJpHJjEdsvTxTN7muK9UsbSonr3XAp9oV/w7xx65N5iEEjvC1CaehAnKOSM6QiyKs8KLiv2vHaabsNNusFZgHUZYUApErbpK9g3UR0744Sy8hVe/l75SmOofZvu59vU509MMc8TdqxssIv2g7JTw="
plaintext, err := Decode(encryptedKey, encryptedData)
if err != nil {
fmt.Errorf("an error occured while decrypting: %s", err.Error())
}
fmt.Printf("in hex format: %x", plaintext)
}
func Decode(encryptionKey []byte, encryptedData string) ([]byte, error) {
ciphertext, err := base64.StdEncoding.DecodeString(encryptedData)
if err != nil {
return nil, err
}
block, err := aes.NewCipher(encryptionKey)
if err != nil {
return nil, err
}
iv := ciphertext[:aes.BlockSize]
stream := cipher.NewCTR(block, iv)
plaintext := make([]byte, len(ciphertext)-aes.BlockSize)
stream.XORKeyStream(plaintext, ciphertext[aes.BlockSize:])
return plaintext, nil
}

输出:

15affc3ab646bbf776136d0dc4a37c1e70c3433f9df8a9f7434b74992c25316d78405deffdbf964bb7e9229f9185b85bcf253bb3dcddb782872e018a1aed84414aaf5bc76af8d8accaf6137758d72322d09a7f56a9b57afc22a1b36cf84f24dc558b6654c69875cfb3b75c765794d22765b6f47f7a5c2b8a1822cbae4e2b66e8d413cdb5631a5a39fc435681bc139d01b06034facaa5b8b8b9b9b6b9b8b6b8b7b9b7b8b5b9b5b8a8b9b 8d7cc1677a209f7e4fe9b746d7b530e546040cd2af22475837083823381626d9e3bfca6e531d9125d851deb34c2d42363e3de5e3ac93bf66b3b2e06c57f1068c41c70a9dfe0d4d131f45ed6d2514a1ec73850c7a51982d31d0e68a785b5接收到的数据为88512b7eed66bb20d510bdc9ec12095c8e445699325c2ce9e52ec8e5359330bc946e5279acd84369394867d7b2002205f5883f4a281c9123ef6d1ab

预期输出:

7b226d65737361676545787069726174696f6e223a22313634343833313330363037222c226d65737 36167654964223a22414832456a74635157674c4f31364b415a702d316f6e5f353954386a58736f356135305064426f555f39664e737a396e763533376c62674e70345a4a5536754177714d7845646e5a50625a6c69753656668665150366d5145343248544b5f6f765a74316a30796c6a424778424743326f 7333655f336554b6f503463745a4b65694139767637222c227061796d656e744d6574686f64223a2243415244222c227061796d656e744d6534686f64446574661696c73223a7b2265787069726174696f6e5965611722223a3323032372c22657870697261746f6e7468223a3132c2270616e223a2234313131313131313132c22617574684d6574686f4f4e4c4c59227d7d

样本沙箱

由于您的IV为0,您需要将ivplaintext设置为:

iv := make([]byte, aes.BlockSize)

plaintext := make([]byte, len(ciphertext))

从而产生期望的输出。

请参阅https://go.dev/play/p/X3ifo26irH5

最新更新