


Entschlüsseln Sie in GO codierte C#-Zeichenfolge mithilfe der AES-GSM-Methode
php-Editor Xigua stellt Ihnen eine Methode zum Entschlüsseln von C#-Strings in der GO-Sprache vor – AES-GSM. AES-GSM ist ein fortschrittlicher Verschlüsselungsstandard, der die Vorteile von AES (Advanced Encryption Standard) und GSM (Global System for Mobile Communications) vereint. Mithilfe der AES-GSM-Methode können wir in GO codierte C#-Strings effektiv entschlüsseln und so eine sichere Übertragung und den Schutz von Daten ermöglichen. In diesem Artikel werden die Prinzipien und Nutzungsschritte von AES-GSM im Detail vorgestellt, um den Lesern die einfache Beherrschung dieser Verschlüsselungs- und Entschlüsselungstechnologie zu erleichtern.
Frageninhalt
Ich habe eine mit aes-gcm in go verschlüsselte Zeichenfolge und ihre Passphrase und versuche, sie in c# zu entschlüsseln. Ich kann jedoch nicht den richtigen Weg finden, es in c# zu entschlüsseln. Der Fehler, den ich erhalte, besagt, dass die Größe des iv, die Länge des Blocks, nicht für den C#-Entschlüsselungsalgorithmus geeignet ist. Hier sind die Werte in go:
aes encr/decr passphrase: this-is-a-test-passphrase
input string: text to encrypt hello world 123
encrypted string: 94b681ef29d9a6d7-e6fa36c4c00977de1745fc63-a1ad0481bdbeeaa02c013a2dce82520ddd762355e18f1e2f20c0ea9d001ece24e9b8216ed4b9c6a06e1ef34c953f80
Go-Code: https://go.dev/play/p/jn8ie61ntzw
Dies ist der Entschlüsselungscode in go
func appdecryptimpl(passphrase, ciphertext string) string { arr := strings.split(ciphertext, "-") salt, _ := hex.decodestring(arr[0]) iv, _ := hex.decodestring(arr[1]) data, _ := hex.decodestring(arr[2]) key, _ := appderivekey(passphrase, salt) b, _ := aes.newcipher(key) aesgcm, _ := cipher.newgcm(b) data, _ = aesgcm.open(nil, iv, data, nil) return string(data) } func appderivekey(passphrase string, salt []byte) ([]byte, []byte) { if salt == nil { salt = make([]byte, 8) rand.read(salt) } return pbkdf2.key([]byte(passphrase), salt, 1000, 32, sha256.new), salt }
Dies ist der Verschlüsselungscode in go
func AppEncryptImpl(passphrase string, plaintext string) string { key, salt := appDeriveKey(passphrase, nil) iv := make([]byte, 12) rand.Read(iv) b, _ := aes.NewCipher(key) aesgcm, _ := cipher.NewGCM(b) data := aesgcm.Seal(nil, iv, []byte(plaintext), nil) return hex.EncodeToString(salt) + "-" + hex.EncodeToString(iv) + "-" + hex.EncodeToString(data) }
Ich versuche, denselben entschlüsselten Login in c# zu replizieren, damit er die endgültige Zeichenfolge entschlüsseln und generieren kann.
Ich habe mehrere Entschlüsselungslogiken in c# ausprobiert, sie finden Sie hier:
https://dotnetfiddle.net/32sb5m Diese Funktion verwendet den Namespace system.security.cryptography, führt jedoch zu einer falschen iv-Größe.
https://dotnetfiddle.net/wxkuyr Eine modifizierte Version des oben Gesagten für .net 5 führt zu denselben Ergebnissen
https://dotnetfiddle.net/6iftps Die Verwendung der Hüpfburg-Bibliothek verursacht den Fehler „Mac Check-in GCM fehlgeschlagen“
https://dotnetfiddle.net/8mjs3g Ein alternativer Ansatz, der die Methode rfc2898derivebytes verwendet, erzeugt die Fehlermeldung „Berechnetes Authentifizierungstoken stimmt nicht mit eingegebenem Authentifizierungstoken überein“
Ist die derzeit verwendete Methode korrekt oder gibt es eine andere Möglichkeit, aes-gcm in c# zu entschlüsseln? Was kann getan werden, um diese Fehler in Bezug auf C# zu umgehen?
Lösung
Sie sind kurz vor dem letzten Code. go Hängt das Authentifizierungs-Tag an das Ende des generierten Chiffretexts an. Du hast es hier richtig extrahiert:
// extract the tag from the encrypted byte array byte[] tag = new byte[16]; array.copy(encrypteddata, encrypteddata.length - 16, tag, 0, 16);
Allerdings behandeln Sie das Array mit dem tatsächlichen verschlüsselten Text + Authentifizierungstoken weiterhin so, als ob es nur verschlüsselten Text enthält. Um das Problem zu beheben, extrahieren Sie es ebenfalls:
public static void Main() { // This is the encrypted string that you provided string encryptedString = "a6c0952b78967559-2953e738b9b005028bf4f6c0-7b8464d1ed75bc38b4503f6c8d25d6bfc22a19cc1a8a92bc6faa1ed6cd837b97072bc8e16fd95b6cfca67fccbad8fc"; // This is the passphrase that you provided string passphrase = "this-is-a-test-passphrase"; string[] splitStrs = encryptedString.Split('-'); byte[] salt = Convert.FromHexString(splitStrs[0]); byte[] iv = Convert.FromHexString(splitStrs[1]); // this is encrypted data + tag byte[] encryptedDataWithTag = Convert.FromHexString(splitStrs[2]); // Extract the tag from the encrypted byte array byte[] tag = new byte[16]; // But also extract actual encrypted data byte[] encryptedData = new byte[encryptedDataWithTag.Length - 16]; Array.Copy(encryptedDataWithTag, 0, encryptedData, 0, encryptedData.Length); Array.Copy(encryptedDataWithTag, encryptedDataWithTag.Length - 16, tag, 0, 16); byte[] key = new Rfc2898DeriveBytes(passphrase, salt, 1000, HashAlgorithmName.SHA256).GetBytes(32); // Create an AesGcm object AesGcm aesGcm = new AesGcm(key); int textLength = encryptedData.Length; // Decrypt the ciphertext byte[] plaintext = new byte[textLength]; aesGcm.Decrypt(iv, encryptedData, tag, plaintext); // Convert the plaintext to a string and print it string decryptedString = Encoding.UTF8.GetString(plaintext); Console.WriteLine(decryptedString); }
Das obige ist der detaillierte Inhalt vonEntschlüsseln Sie in GO codierte C#-Zeichenfolge mithilfe der AES-GSM-Methode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

In Bezug auf das Problem der benutzerdefinierten Struktur -Tags in Goland bei der Verwendung von Goland für GO -Sprachentwicklung stoßen Sie häufig auf einige Konfigurationsprobleme. Einer von ihnen ist ...

Go Language Slice Index: Warum fasst ein Einzelelement-Slice aus Index 1 ohne Fehler ab? In der GO -Sprache sind Scheiben eine flexible Datenstruktur, die sich auf den Boden beziehen kann ...

Go Zeigersyntax und Probleme bei der Verwendung der Viper -Bibliothek bei der Programmierung in Go -Sprache. Es ist entscheidend, die Syntax und Verwendung von Zeigern zu verstehen, insbesondere in ...

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Warum bewirkt die Kartendiseration in Go alle Werte zum letzten Element? In Go -Sprache begegnen Sie, wenn Sie einige Interviewfragen konfrontiert sind, häufig Karten ...
