我在 Go 中編寫了一個客戶端應用程序,它需要與服務器端的 C 程序進行交互??蛻舳藞绦?AES CFB 加密,服務器解密。不幸的是,服務器端有一個重用初始化向量的錯誤。它嘗試基于以下三個解密操作:-key1, ivkey2, ivkey3, iv由于這個問題,iv 實際上在解密操作之間被修改。我現在的問題是如何使用 Go 在客戶端重現這種行為。通過將 Println 插入下面的 encrypt 函數,我可以看到 cfb 結構,我認為它包含下一個塊的修改后的 IV,但因為它是一個流接口,我不確定如何將它提取到一個字節片中。有什么建議么?謝謝package mainimport ( "fmt" "encoding/hex" "crypto/cipher" "crypto/aes")func encrypt_aes_cfb(plain, key, iv []byte) (encrypted []byte) { block, err := aes.NewCipher(key) if err != nil { panic(err) } encrypted = make([]byte, len(plain)) stream := cipher.NewCFBEncrypter(block, iv) stream.XORKeyStream(encrypted, plain) fmt.Println(stream) return}func main() { plain := []byte("Hello world...16Hello world...32") key := make([]byte, 32) iv := make([]byte, 16) enc := encrypt_aes_cfb(plain, key, iv) fmt.Println("Key: ", hex.EncodeToString(key)) fmt.Println("IV: ", hex.EncodeToString(iv)) fmt.Println("Enc: ", hex.EncodeToString(enc))}
Golang AES CFB - 變異 IV
幕布斯6054654
2021-08-10 20:43:20