2017-06-12 5 views
-3

Ich verschlüsselte eine Zeichenfolge in Node.js wie folgt.Wie entschlüssele ich eine AES256-Bitchiffre in Golang, die in Nodejs verschlüsselt wurde?

Ich bemerkte, dass ein Puffer in Nodejs wie hex ist, aber alle 2 aufeinander folgenden Zeichen paaren. Also, die Länge ist die Hälfte von allem, was herauskommen wird, wenn ich es in ein Sechseck verwandle.

Beispiel:

Puffer:

<Buffer c3 80 36 f6 51 57 cb 6d b0 e8 fd 85 5a a2 8a da 07 4b e7 19 17 d1 c8 ee dc 2a e4 d8 5e 3c 9d a6> 

Hex:

c38036f65157cb6db0e8fd855aa28ada074be71917d1c8eedc2ae4d85e3c9da6 

Jetzt Der Schlüssel ich in aes256 verwenden, können nicht 64 der Länge Hier Pufferlänge ist 32 und Hex-Länge ist 64.

Ich möchte diese Chiffre in Golang entschlüsseln und ich muss diesen Schlüssel und iv t verwenden o es entschlüsseln.

AES in Golang dauert eine Länge abhängig von der Größe des Schlüssels und wenn es einen Schlüssel der Länge 64 sieht, wird der Fehler Invalid key length ausgegeben.

Wie kann ich es in Golang entschlüsseln? Es ist mein aktuelles Programm in go: https://play.golang.org/p/SoXOz3XIPK

package main 

import (
    "crypto/aes" 
    "crypto/cipher" 
    "fmt" 
    "log" 
) 

func main() { 

    encKey := "c38036f65157cb6db0e8fd855aa28ada074be71917d1c8eedc2ae4d85e3c9da6" 
    iv := "79b67e539e7fcaefa7abf167de5c06ed" 
    cipherText := "c02eccfc514a0b7fae830586dd56e0fcebb81fc49f41fa6dedf099c3645793bef7ec7075eca30063f9c0ef395d5ee2d44e4f3490114280abb7cf86d6eb525e2ec9bd2b781388986480f8b3df95f7b10e" 

    block, err := aes.NewCipher([]byte(encKey)) 
    if err != nil { 
     log.Fatalf("%s", err) 
    } 

    decrypter := cipher.NewCFBDecrypter(block, []byte(iv)) 

    decrypted := make([]byte, 1000) 
    decrypter.XORKeyStream(decrypted, []byte(cipherText)) 

    fmt.Printf("%s\n", string(decrypted)) 

} 
+0

Wie wird diese zwischen Knoten geteilt "Puffer" und gehen? – GPX

+0

@GPX Es ist nicht. Ein Cookie wird in nodejs so verschlüsselt und ich muss es in golang entschlüsseln, damit ich die darin gespeicherten Daten lesen kann. –

+0

Der Wert eines Cookies ist im Wesentlichen eine Zeichenfolge. Was ist seine Länge? – GPX

Antwort

3

Ich löste dieses Problem mit Hilfe von @osgx

Das sind die Dinge, die ich brauchte, um richtig zu entschlüsseln zu ändern.

  1. Alle Hex-Strings dekodieren, die ich verwendete.

  2. Ich überprüft Nodejs Dokumentation und die Chiffre Methoden/Algorithmen verwenden ähnliche Benennungsschema wie openssl. Also, ich habe diesen Befehl ausgeführt openssl list-cipher-algorithms | grep "AES256" und ich habe eine Ausgabe wie folgt, AES256 => AES-256-CBC was bedeutet, dass, wenn ich aes256 in nodejs verwende, wird es wirklich tun aes-256-cbc. Dann habe ich meinen Golang-Code überprüft und ich habe aes-256-cfb verwendet, was falsch ist. Also habe ich das geändert und einen cbc Decrypter benutzt.

Das Ändern dieser beiden Dinge führt zu korrekten Ergebnissen.

Vielen Dank für die Hilfe @osgx.

Mein aktualisierten Code ist:

package main 

import (
    "crypto/aes" 
    "crypto/cipher" 
    "encoding/hex" 
    "fmt" 

) 

func main() { 

    encKey := "c38036f65157cb6db0e8fd855aa28ada074be71917d1c8eedc2ae4d85e3c9da6" 
    iv := "79b67e539e7fcaefa7abf167de5c06ed" 
    cipherText := "c02eccfc514a0b7fae830586dd56e0fcebb81fc49f41fa6dedf099c3645793bef7ec7075eca30063f9c0ef395d5ee2d44e4f3490114280abb7cf86d6eb525e2ec9bd2b781388986480f8b3df95f7b10e" 

    encKeyDecoded, err := hex.DecodeString(encKey) 
    if err != nil { 
     panic(err) 
    } 
    cipherTextDecoded, err := hex.DecodeString(cipherText) 
    if err != nil { 
     panic(err) 
    } 
    ivDecoded, err := hex.DecodeString(iv) 
    if err != nil { 
     panic(err) 
    } 
    block, err := aes.NewCipher([]byte(encKeyDecoded)) 
    if err != nil { 
     panic(err) 
    } 

    mode := cipher.NewCBCDecrypter(block, []byte(ivDecoded)) 

    mode.CryptBlocks([]byte(cipherTextDecoded), []byte(cipherTextDecoded)) 

    fmt.Println(string(cipherTextDecoded)) 
} 

https://play.golang.org/p/Zv24WoKtBY

+0

Was war Ihr Knoten js gleichwertigen Code? Ich stehe vor einem ähnlichen Problem. Können Sie bitte teilen Sie Ihren Knoten Js-Code auch, die den Text verschlüsselt – hatellla

+0

@hatellla Die Cookies wurden mit [Client-Sitzungen] (https://npm.im/client-sessions) Npm-Modul verschlüsselt. Alle Argumente waren denen in ihrem Beispiel für die "grundlegende Verwendung" ähnlich. –

Verwandte Themen