Rumah >pembangunan bahagian belakang >Golang >Mengapakah Keputusan Penyulitan My Go dan Pycrypto AES-CFB Berbeza?
Percanggahan dalam Keputusan Penyulitan AES-CFB antara Go dan Pycrypto
Dalam percubaan untuk menyepadukan aplikasi Go baharu dengan pangkalan kod Python sedia ada, pengguna menghadapi percanggahan dalam teks sifir yang dihasilkan oleh kedua-dua bahasa. Perbezaan ini timbul khususnya dalam pelaksanaan penyulitan AES-CFB.
Isu ini berpunca daripada perbezaan dalam saiz segmen CFB yang digunakan oleh setiap bahasa. Pycrypto menggunakan saiz segmen 8 bit (CFB8), manakala Go tidak menawarkan sokongan asli untuk konfigurasi ini. Akibatnya, teks sifir yang dijana oleh Go dan Pycrypto berbeza, menjadikannya tidak dapat dihurai bersama.
Penyiasatan kod Go mendedahkan bahawa kelas CFBDecrypter dan CFBEncrypter berpotensi untuk disesuaikan untuk menyokong CFB8 dengan mengubah suai kod sumber asas. Pendekatan ini akan membolehkan aplikasi Go menyahsulit teks sifir yang disulitkan dengan lancar menggunakan tetapan CFB8 Pycrypto.
Kod Go Diubah Suai:
package main import ( "fmt" "crypto/cipher" "crypto/aes" "encoding/hex" ) // encrypt func main() { payload, err1 := hex.DecodeString("abababababababababababababababababababababababababababababababab") password, err2 := hex.DecodeString("0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF") iv, err3 := hex.DecodeString("00000000000000000000000000000000") if err1 != nil { fmt.Printf("error 1: %v", err1) return } if err2 != nil { fmt.Printf("error 2: %v", err2) return } if err3 != nil { fmt.Printf("error 3: %v", err3) return } aesBlock, err4 := aes.NewCipher(password) cfb8Decrypter := cipher.NewCFB8Decrypter(aesBlock, iv) cfb8Decrypter.XORKeyStream(payload, payload) fmt.Printf("%v\n", hex.EncodeToString(payload)) // should output dbf6b1877ba903330cb9cf0c4f530d40bf77fe2bf505820e993741c7f698ad6b }
Kesimpulan:
Dengan menyesuaikan CFBDecrypter Go dan Kelas CFBEncrypter untuk menyokong CFB8, pengguna boleh memastikan bahawa aplikasi Go boleh menyahsulit teks sifir yang disulitkan dengan berkesan menggunakan tetapan AES-CFB8 Pycrypto, merapatkan jurang antara dua bahasa dan membolehkan penyepaduan yang lancar antara aplikasi Go dan pangkalan kod Python sedia ada.
Atas ialah kandungan terperinci Mengapakah Keputusan Penyulitan My Go dan Pycrypto AES-CFB Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!