为了账号安全,请及时绑定邮箱和手机立即绑定

Go AES CFB 兼容性

Go AES CFB 兼容性

Go
HUX布斯 2021-08-10 17:02:48
我正在开发一个依赖于 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
提交
取消
意见反馈 帮助中心 APP下载
官方微信