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

Neha:

Code dans Vuejs -

var message = "Hello World"
var keyBytes = aesjs.utils.utf8.toBytes("akey123")
var iv = CryptoJS.lib.WordArray.random(8).toString()
var ivBytes =  aesjs.utils.utf8.toBytes(iv)
var messageBytes = aesjs.utils.utf8.toBytes(message);
var aesCfb = new aesjs.ModeOfOperation.cfb(keyBytes, ivBytes);
var encryptedBytes = aesCfb.encrypt(messageBytes);
var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes);

Données que j'envoie à GO - {"iv": iv, "cipher": encryptedHex}

Code dans GO

func DecryptCipher(iv, cipher string) {
    key := []byte("akey123")
    iv := []byte(iv)
    cipherText, _ := hex.DecodeString(cipher)

    block, err := aes.NewCipher(key)
    if err != nil {
        log.Println(err)
    }

    cfb := cipher.NewCFBDecrypter(block, iv)
    cfb.XORKeyStream(cipherText, cipherText)
    fmt.Println("data", string(cipherText))
}

Résultat attendu: "Hello World" Sortie réelle: @ Sa 1 Ig {

Quelqu'un peut-il s'il vous plaît m'aider et me dire ce qui me manque dans le code ci-dessus. Merci d'avance!

Topaco:

Il y a plusieurs failles dans les deux codes qui empêchent l'exécution. Cependant, comme les deux sont en cours d'exécution sur votre système, il semble qu'il s'agisse d'erreurs de copier / coller:

  • La clé est trop courte. AES nécessite une taille de clé de 16, 24 ou 32 octets.
  • Il existe des conflits de dénomination dans le code Go concernant ivet cipher.

Après ces corrections, les programmes sont exécutés, mais le décryptage échoue. Le problème est causé par différentes variantes de CFB: dans le code aes-js, CFB8 est utilisé et dans le code Go, CFB128. Ici, les chiffres indiquent le nombre de bits décalés dans le registre à décalage [1] .

Go ne prend en charge que CFB128, du moins sans modifications plus profondes [2] [3] .

aes-js utilise CFB8 par défaut. Cependant, la variante CFB peut également être définie explicitement avec le troisième paramètre du constructeur cfb. Un changement vers CFB128 est possible avec [4] :

var segmentSize = 16;
var aesCfb = new aesjs.ModeOfOperation.cfb(keyBytes, ivBytes, segmentSize);

Notez que la valeur doit être indiquée en octets, c'est-à-dire que 1 correspond à CFB8 et 16 à CFB128.

CFB est un chiffrement de flux, de sorte qu'un texte en clair de longueur arbitraire peut être chiffré sans remplissage et la longueur du texte chiffré est égale à celle du texte en clair [5] . Malheureusement, il semble y avoir un bogue dans aes-js [6] qui exige que la longueur du texte clair soit un multiple entier de la taille du segment, soit 16 octets dans le cas de CFB128. Sinon, le message d'erreur suivant s'affiche:

invalid plaintext size (must be segmentSize bytes)

C'est-à-dire que si les textes en clair utilisés n'ont pas déjà cette longueur, le bogue nécessite un remplissage explicite, bien qu'un chiffrement de flux ne nécessite pas réellement de remplissage.

Dans le contexte de ces problèmes, vous souhaiterez peut-être utiliser un mode différent ou des bibliothèques différentes.

Outre:

  • Le IV n'est pas la cause du problème: dans l'exemple actuel, avec CryptoJS.lib.WordArray.random(8)un WordArrayavec 8 octets aléatoires est créé et encodé comme une chaîne hexadécimale d'une longueur de 16 octets en utilisant toString(). Cette chaîne hexadécimale est codée en Utf8 et est donc identique dans les deux codes. Néanmoins, les remarques sur la IV dans le commentaire sont bien sûr correctes.
  • Le bogue aes-js est peut-être lié à un bogue identique dans la bibliothèque Python obsolète PyCrypto , qui est corrigé dans le successeur PyCryptodome [7] .
  • Dans [8] le mode CFB est discuté, la 2ème réponse se concentre sur les différentes variantes CFB [9] .

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 du texte à l'aide de node.js qui a été chiffré avec Java Spring Security TextEncryptor

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

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

Décrypter à partir du texte chiffré AES-ECB créé avec php / mcrypt à l'aide de node.js

Comment réparer "garbage" à la tête d'un texte chiffré AES déchiffré (crypto Node.js)?

"Le remplissage n'est pas valide et ne peut pas être supprimé" Erreur lors du décryptage du texte chiffré à l'aide d'Aes

Décrypter la colonne chiffrée dans SQL Server qui est un format non lisible par l'homme

Comment insérer des données dans un champ varbinary chiffré à partir d'un fichier plat à l'aide de SSIS?

La longueur de la valeur chiffrée à l'aide de l'API Google KMS en C # est différente de la longueur du texte chiffré généré directement à partir de l'API dans Postman

Relinéariser un texte chiffré dans SEAL

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

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

Comment c (message chiffré) est-il déchiffré par clé privée dans RSA ?

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

impossible de déchiffrer le texte chiffré AES256

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

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

Désactiver l'indexation du champ chiffré dans elasticsearch

Comment corriger l'erreur de `` taille du texte chiffré invalide '' en Javascript? (aes)

Comment déchiffrer le texte chiffré en texte brut

Vecteur d'initialisation AES à côté du texte chiffré

Décryptage de données chiffrées dans SAP à l'aide de co_aes256_algorithm_pem en Java

Comment obtenir du texte chiffré à la suite du chiffrement à l'aide de AES CBC 128 bits avec SSL ouvert en langage C

Cryptanalyse du texte chiffré à l'aide de Java

Y a-t-il des vulnérabilités dans l'utilisation d'un jeton chiffré AES pour l'autorisation

comment décrypter en php un texte chiffré par python en utilisant AES-256-CCM

Est-il possible d'accéder au signal dans une instance de module non chiffrée à l'intérieur d'un module chiffré?

Vous recherchez une implémentation Java pour déchiffrer un message chiffré à l'aide de la commande openssl -aes-256-cbc -a -salt?

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

TOP liste

  1. 1

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

  2. 2

    Enregistrer le chemin de l'image de la galerie vers la base de données de la salle et l'afficher dans la liste des recycleurs

  3. 3

    Microsoft.WebApplication.targets

  4. 4

    knn classification 10 plis de l'outil et du tri

  5. 5

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

  6. 6

    Quelle est la relation entre le modèle et le tableau ? C'est compliqué

  7. 7

    AutoMapper.Collection.EFCore - Erreur générée lors de la configuration

  8. 8

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

  9. 9

    Fonction de puissance en Java

  10. 10

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

  11. 11

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  12. 12

    Comment remplir les valeurs manquantes avec plusieurs colonnes dans R

  13. 13

    Comment puis-je ajouter un UIView sous mon contrôleur de barre d'onglets par programme?

  14. 14

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

  15. 15

    Sélectionnez le bouton radio sur la saisie de texte

  16. 16

    Comment rechercher des éléments dans une ArrayList? - Java

  17. 17

    opérations en virgule flottante dans go

  18. 18

    Yat-il un référentiel maven application Java à démarrer rapidement 11

  19. 19

    Placez le modeBar en haut au centre à l'aide de plotly.js

  20. 20

    Comment définir la couleur de l'intersection dans un diagramme de Venn?

  21. 21

    Récupérer plusieurs dépôts git dans le même espace de travail Jenkins

chaudétiquette

Archive