Heim > Backend-Entwicklung > Golang > Warum unterscheiden sich die Ergebnisse der AES-CFB-Verschlüsselung von Go und Pycrypto?

Warum unterscheiden sich die Ergebnisse der AES-CFB-Verschlüsselung von Go und Pycrypto?

DDD
Freigeben: 2024-12-10 21:11:23
Original
265 Leute haben es durchsucht

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

Diskrepanz in den AES-CFB-Verschlüsselungsergebnissen zwischen Go und Pycrypto

Bei dem Versuch, eine neue Go-Anwendung in eine vorhandene Python-Codebasis zu integrieren, Ein Benutzer stößt auf Diskrepanzen in den von den beiden Sprachen erzeugten Chiffretexten. Diese Ungleichheit entsteht insbesondere bei der Implementierung der AES-CFB-Verschlüsselung.

Das Problem ergibt sich aus einem Unterschied in der CFB-Segmentgröße, die von den einzelnen Sprachen verwendet wird. Pycrypto verwendet eine Segmentgröße von 8 Bit (CFB8), während Go für diese Konfiguration keine native Unterstützung bietet. Infolgedessen unterscheiden sich die von Go und Pycrypto generierten Chiffretexte, sodass sie gegenseitig nicht entzifferbar sind.

Die Untersuchung des Go-Codes zeigt, dass die Klassen CFBDecrypter und CFBEncrypter möglicherweise durch Änderung des zugrunde liegenden Quellcodes an die Unterstützung von CFB8 angepasst werden könnten. Dieser Ansatz würde es Go-Anwendungen ermöglichen, Chiffretexte, die mit den CFB8-Einstellungen von Pycrypto verschlüsselt wurden, nahtlos zu entschlüsseln.

Geänderter Go-Code:

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
}
Nach dem Login kopieren

Schlussfolgerung:

Durch die Anpassung der CFBDecrypter- und CFBEncrypter-Klassen von Go an die Unterstützung Mit CFB8 kann der Benutzer sicherstellen, dass Go-Anwendungen mit den AES-CFB8-Einstellungen von Pycrypto verschlüsselte Chiffretexte effektiv entschlüsseln können, wodurch die Lücke zwischen den beiden Sprachen geschlossen und eine nahtlose Integration zwischen der Go-Anwendung und der vorhandenen Python-Codebasis ermöglicht wird.

Das obige ist der detaillierte Inhalt vonWarum unterscheiden sich die Ergebnisse der AES-CFB-Verschlüsselung von Go und Pycrypto?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage