亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang AES CFB - 變異 IV

Golang AES CFB - 變異 IV

Go
幕布斯6054654 2021-08-10 20:43:20
我在 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))}
查看完整描述

1 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

沿著您暗示的路徑走下去有點難看,并且在實現更改時容易中斷。


您可以通過以下方式從流中獲取 IV:


s := reflect.Indirect(reflect.ValueOf(stream))

lastIV := s.FieldByName("next").Bytes()

但是,還有更簡單的方法!連接純文本輸入,以便第二個的流從第一個末尾的 IV 開始(依此類推)。


Playground Example


combined := append(plain, plain2...)

encCombined := encrypt_aes_cfb(combined, key, iv)


enc := encCombined[:len(plain)]

enc2 := encCombined[len(plain):]


查看完整回答
反對 回復 2021-08-10
  • 1 回答
  • 0 關注
  • 315 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號