Comment déchiffrer un chiffrement de bits AES256 dans Golang qui a été chiffré dans nodejs?

Ishan Jain:

J'ai chiffré une chaîne dans Node.js comme ceci.

var cipher = crypto.createCipheriv(
"aes256",
"<A Buffer of length 32>",
"79b67e539e7fcaefa7abf167de5c06ed"  
);

J'ai remarqué qu'un tampon dans nodejs est comme hex mais tous les 2 caractères consécutifs sont appariés. Donc, sa longueur est la moitié de ce qui sortira si je le convertis en hexagone.

Exemple:

Tampon:

<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

Maintenant, la clé que j'utilise dans aes256 ne peut pas avoir une longueur de 64. Ici, la longueur du tampon est de 32 et la longueur de l'hex est de 64.

Je veux déchiffrer ce chiffrement en golang et je vais devoir utiliser cette clé et iv pour le déchiffrer.

aes en golang prend une longueur en fonction de la taille de la clé et quand il voit une clé de longueur 64 , il renvoie une erreur qui dit Invalid key length.

Comment le déchiffrer dans Golang? Il y a mon programme actuel dans 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))

}
Ishan Jain:

J'ai résolu ce problème avec l'aide de @osgx

Ce sont les choses que je devais changer pour décrypter correctement.

  1. Décodez toutes les chaînes hexadécimales que j'utilisais.

  2. J'ai vérifié la documentation de nodejs et les méthodes / algorithmes de chiffrement utilisent un schéma de dénomination similaire à celui de openssl. Donc, j'ai exécuté cette commande openssl list-cipher-algorithms | grep "AES256"et j'ai obtenu une sortie comme celle-ci, ce AES256 => AES-256-CBCqui signifie que si j'utilise aes256dans nodejs, ça va vraiment faire aes-256-cbc. Ensuite, j'ai vérifié mon code golang et j'utilisais aes-256-cfbce qui est faux. Donc, j'ai changé cela et utilisé un décrypteur cbc.

Changer ces deux choses donne de bons résultats.

Merci beaucoup pour l'aide @osgx.

Mon code mis à jour est:

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

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment déchiffrer un texte chiffré dans Go qui est chiffré dans vuejs à l'aide du package aes-js

Essayer de déchiffrer une chaîne en utilisant openssl / golang qui a été chiffrée dans des rails

Problème avec la chaîne de déchiffrement qui est chiffrée dans iOS AES / CBC / PKCS7 Ajout de l'algorithme 128 bits sous Android

impossible de déchiffrer le texte chiffré AES256

Comment déchiffrer des données en Java qui ont été chiffrées dans Obj-c

Comment la chaîne de déchiffrement en c # a été chiffrée dans iOS à l'aide de Rijndael

Comment utiliser la paire de clés RSA pour le chiffrement et le déchiffrement AES dans Golang

Comment décrypter une valeur en frontend qui est chiffrée dans le backend (nodejs)?

Débordement de texte chiffré par chiffrement AES 128 bits ECB

nodejs crypto Y a-t-il un texte chiffré et déchiffré, devrait donner un chiffrement différent à chaque fois

Comment déchiffrer du texte à l'aide de node.js qui a été chiffré avec Java Spring Security TextEncryptor

Comment puis-je déchiffrer un chiffrement de substitution?

La différence entre le module crypto dans Node.js et CryptoJS dans le déchiffrement AES256

mauvais déchiffrement lors de la tentative de déchiffrement d'un fichier chiffré AES-CBC en utilisant openssl

Déchiffrer en Go ce qui a été chiffré avec AES en mode CFB en Python

Chiffrement dans Node JS à l'aide du CTR AES 256 et décryptage dans Golang

Comment décrypter un segment de flux de transport chiffré AES avec Golang?

Comment chiffrer à l'aide de crypto AES dans nodejs?

Comment obtenir les bits d'un octet dans golang?

Impossible de déchiffrer la propriété de configuration dans la configuration Spring Cloud à l'aide du chiffrement asymétrique

Lancement du déchiffrement de l'API AES unique s'il n'a pas été chiffré auparavant

Impossible de déchiffrer les données AES à l'aide d'Obj-C qui ont été chiffrées à l'aide de Java

Comment obtenir / mettre un objet de chiffrement S3 dans nodejs avec KMS?

Comment déchiffrer des données à l'aide de la classe phpseclib Crypt_RSA qui a été chiffrée par travist / jsencrypt

Cryptage et déchiffrement Nodejs AES-256-GCM dans le client par navigateur webcrypto api

Comment utiliser un mot de passe chiffré dans Apache BasicDataSource?

Existe-t-il un moyen de chiffrer en java / kotlin et de déchiffrer en nodejs avec AES / CBC?

Pourquoi decipherIv.final () échoue-t-il dans node.js lors du déchiffrement d'une valeur chiffrée à l'aide de PHP?

Tenter de déchiffrer le texte chiffré dans une fonction Lambda à l'aide de KMS entraîne un délai d'expiration

TOP liste

  1. 1

    comment afficher un bouton au-dessus d'un autre élément ?

  2. 2

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  3. 3

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  4. 4

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  5. 5

    Conversion double en BigDecimal en Java

  6. 6

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Passer la taille d'un tableau 2D à une fonction ?

  9. 9

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  10. 10

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  11. 11

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  12. 12

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  13. 13

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  14. 14

    Exporter la table de l'arborescence vers CSV avec mise en forme

  15. 15

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  16. 16

    Créer un système Buzzer à l'aide de python

  17. 17

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  18. 18

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  19. 19

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  20. 20

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  21. 21

    Microsoft.WebApplication.targets

chaudétiquette

Archive