Rumah >pembangunan bahagian belakang >Golang >Mengapakah Keputusan Penyulitan My Go dan Pycrypto AES-CFB Berbeza?

Mengapakah Keputusan Penyulitan My Go dan Pycrypto AES-CFB Berbeza?

DDD
DDDasal
2024-12-10 21:11:23313semak imbas

Why Do My Go and Pycrypto AES-CFB Encryption Results Differ?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn