我正在开发一个依赖于 AES CFB 的 Go 客户端应用程序。服务器端是用 C 编写的。我的问题是 Go 的 AES CFB 实现似乎与许多其他实现(包括 OpenSSL)不同。我写这个是为了测试我的理论:-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) return}func decrypt_aes_cfb(encrypted, key, iv []byte) (plain []byte) { block, err := aes.NewCipher(key) if err != nil { panic(err) } plain = make([]byte, len(encrypted)) stream := cipher.NewCFBDecrypter(block, iv) stream.XORKeyStream(plain, encrypted) return}func main() { plain := []byte("Hello world.....") key := []byte("01234567890123456789012345678901") iv := []byte("0123456789012345") enc := encrypt_aes_cfb(plain, key, iv) dec := decrypt_aes_cfb(enc, key, iv) fmt.Println("Key: ", hex.EncodeToString(key)) fmt.Println("IV: ", hex.EncodeToString(iv)) fmt.Println("Enc: ", hex.EncodeToString(enc)) fmt.Println("In: ", hex.EncodeToString(plain)) fmt.Println("Out: ", hex.EncodeToString(dec))}当它运行时,它似乎工作得很好,但是,如果将加密的字节粘贴到另一个 AES 实现中并使用相同的密钥和 IV 解密,则明文会损坏(第一个字节除外)。 http://aes.online-domain-tools.com/提供了一种简单的测试方法。任何建议为什么会发生这种情况以及我如何解决它?
2 回答
- 2 回答
- 0 关注
- 253 浏览
添加回答
举报
0/150
提交
取消