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?
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:
É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.
laisse moi dire quelques mots