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

quantité

Les développeurs backend ont chiffré une valeur dans nodejs à l'aide du module crypto. Le code est indiqué ci-dessous:

   const _encrypt = async function(text){
     var cipher = crypto.createCipher('aes-256-cbc','123|a123123123123123@&12')
     var crypted = cipher.update(text,'utf8','hex')
     crypted += cipher.final('hex');
     console.log("in generic function....encrpted val", crypted)
     return crypted;
   }

J'ai besoin de décrypter cette valeur dans le front-end (Angular). J'ai donc essayé de décrypter comme ci-dessous:

    let bytes = CryptoJS.AES.decrypt("e0912c26238f29604f5998fa1fbc78f6",'123|a123123123123123@&12'); 
    if(bytes.toString()){
        let m = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
        console.log("data ",m);
    }

en utilisant une valeur codée en dur. Mais je reçois une erreur: erreur de données UTF-8 malformée. Quelqu'un peut-il s'il vous plaît me dire comment décrypter cela du côté angulaire?

Terry Lennox

C'est assez délicat. La fonction crypto.createCipher crée une clé et un IV à partir du mot de passe que vous fournissez (voir la documentation de createCipher pour plus de détails).

Ceci est implémenté à l'aide de la fonction OpenSSL EVP_BytesToKey .

Une implémentation JavaScript est disponible ici: openssl-file .. nous allons l'utiliser pour obtenir une clé et un IV du mot de passe.

Il y a donc deux étapes ici:

  1. Obtenez une clé et un IV de votre mot de passe.
  2. Utilisez-les avec Crypto.js pour décoder votre chaîne encodée.

Étape 1: Obtenez la clé et IV (Exécuter dans Node.js)

const EVP_BytesToKey = require('openssl-file').EVP_BytesToKey;
const result = EVP_BytesToKey(
    '123|a123123123123123@&12',
    null,
    32,
    'MD5',
    16
);

console.log('key:', result.key.toString('hex'));
console.log('iv:', result.iv.toString('hex'));

Étape 2: déchiffrer la chaîne:

const encryptedValues = ['e0912c26238f29604f5998fa1fbc78f6', '0888e0558c3bce328cd7cda17e045769'];

// The results of putting the password '123|a123123123123123@&12' through EVP_BytesToKey
const key = '18bcd0b950de300fb873788958fde988fec9b478a936a3061575b16f79977d5b';
const IV = '2e11075e7b38fa20e192bc7089ccf32b';

for(let encrypted of encryptedValues) {
    const decrypted = CryptoJS.AES.decrypt({ ciphertext: CryptoJS.enc.Hex.parse(encrypted) }, CryptoJS.enc.Hex.parse(key), { 
        iv: CryptoJS.enc.Hex.parse(IV), 
        mode: CryptoJS.mode.CBC
    });
     
    console.log('Ciphertext:', encrypted);
    console.log('Plain text:', decrypted.toString(CryptoJS.enc.Utf8));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>

Notez que si vous changez le mot de passe, vous devez générer une nouvelle clé et iv en utilisant EVP_BytesToKey.

Je dois noter que createCipher est désormais obsolète, donc à utiliser avec prudence. La même chose s'applique à EVP_BytesToKey.

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écrypter dans nodejs qui est crypté en utilisant JAVA

Comment changer la valeur d'une variable qui est une valeur dans un hachage (en utilisant le hachage)?

Comment décrypter une chaîne en PL/SQL qui est cryptée avec PHP ?

Comment afficher une image qui est générée dans le backend avec Django

Comment obtenir une valeur dans le jQuery, qui est envoyée depuis le serveur node js?

Décrypter les données dans une requête PostgreSQL qui a été chiffrée avec C #

Comment normaliser une décimale en un nombre qui est une valeur dans une plage

Comment crypter / décrypter une valeur de session dans Laravel

Comment puis-je sélectionner une valeur d'option en utilisant une valeur qui est une URL dans Jquery?

Comment itérer une clé et une valeur dans un dictionnaire en fonction de ce qui est déjà dans le dictionnaire

Comment gérer une valeur multiple HTML `select` dans le backend Node si une seule option est sélectionnée

comment utiliser la valeur d'une variable qui a été calculée dans une boucle en java

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

Mes données ont une virgule dans la valeur de la colonne qui est aussi un délimiteur, comment le lire par csv.reader en python

Comment lire une clé privée chiffrée PKCS8 qui est également codée en DER avec bouncycastle?

Comment filtrer une liste qui est une valeur d'une entrée de carte dans java 8?

Quel sera le type d'une valeur qui est en état de hachage dans son fichier api dans corda ?

Comment modifier la valeur d'une clé spécifique qui est dupliquée plusieurs fois dans le JSON à l'aide du nœud JS

Comment insérer une valeur dans une liste qui est déjà dans une liste?

Comment récupérer une valeur de paramètre qui n'est pas définie dans le rapport ?

Comment obtenir un élément qui est un enfant d'une balise avec une valeur spécifiée en XML?

Comment ajouter une nouvelle colonne à un pandas df qui renvoie la plus petite valeur qui est supérieure dans le même groupe à partir d'une autre dataframe

Comment trouver dans un ensemble trié un élément qui est juste en dessous d'une certaine valeur

comment déployer le frontend (React.js) et le backend (Node.js) dans une seule application Heroku

Comment insérer une valeur Number qui est une différence entre le champ 1 et le champ 2 d'une autre table dans Oracle ?

Comment puis-je accéder à une ressource lorsqu'elle est déclarée en tant que classe dans le backend C #?

Comment déboguer une valeur de retour qui n'est jamais stockée en tant que variable locale en c #

Comment masquer le champ qui est la clé avant dans le sérialiseur en fonction d'une déclaration

Comment supprimer un vecteur qui est une valeur spécifique du tenseur dans le tensorflow?

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