Impossible de déchiffrer la chaîne avec CryptoJS
Je suis en train de coder/décoder des données à l'aide de CryptoJS, comme un preliminar " test pour le code que je souhaite développer. C'est le code que j'utilise pour le chiffrement:
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script>
var message = "Secret Message";
var key = CryptoJS.enc.Hex.parse('36ebe205bcdfc499a25e6923f4450fa8');
var iv = CryptoJS.enc.Hex.parse('be410fea41df7162a679875ec131cf2c');
//Encription. Works ok
var encrypted = CryptoJS.AES.encrypt(
message,key,
{
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
console.log('encrypted:'+encrypted.ciphertext.toString());
<script>
C'est le premier test que j'ai utiliser pour le déchiffrement. Il fonctionne OK, retour 3f0e590d2617dc7007b89350bd590409
//Decription. Works ok with "encrypted" parameter
var decrypted = CryptoJS.AES.decrypt(
encrypted,key,
{
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
console.log('decrypted:'+decrypted.toString(CryptoJS.enc.Utf8));
Notons que encrypted
paramètre est le résultat de l'appel précédent à CryptoJS.AES.encrypt
. C'est un objet.
Le problème que j'ai, c'est quand j'ai essayer de déchiffrer directement à la chaîne:
//Decription. It fails with manual data
var manual_data = CryptoJS.enc.Hex.parse('3f0e590d2617dc7007b89350bd590409');
var decrypted = CryptoJS.AES.decrypt(
manual_data,key,
{
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
console.log('decrypted, by hand:'+decrypted.toString(CryptoJS.enc.Utf8));
Elle retourne un objet "vide" (une chaîne vide dans l'exemple ci-dessus). Il semble qu'il y est quelques données qui CryptoJS.AES.décrypter les besoins qui est stockée dans les crypté objet du premier exemple, mais manquant de la wordarray du deuxième exemple.
Quelqu'un sait pourquoi cela se produit?
source d'informationauteur Alvaro Maceda
Vous devez vous connecter pour publier un commentaire.
J'ai été déconner avec ce temps et je pense avoir trouvé votre problème. Le principal problème est de cette ligne
encrypted.ciphertext.toString()
. Ce que vous voulez, c'est justeencrypted.toString()
.La
toString
fonction est définie pour cet objet par CryptoJS et il renvoie le message crypté qui peut être envoyé en toute sécurité. Donc, si nous modifions que nous allons avoir quelque chose comme ceci:Ce sera de sortie
Pw5ZDSYX3HAHuJNQvVkECQ==
au lieu de3f0e590d2617dc7007b89350bd590409
. La raison de votre deuxième fonction est le travail, c'est parce qu'il n'utilise pasencrypted.ciphertext.toString()
il utilise juste l'objet réel, donc aucun changement sur celui-là. Pour le dernier, nous aurons le changement le texte erroné d'utilisation pour le nouveau texte qui est retournée sans l'ciphertext
partie, mais nous avons aussi à supprimer leCryptoJS.enc.Hex.parse
. Je ne sais pas vraiment ce que vous faisiez ici, mais je peux étudier si vous signifiait quelque chose.Ce devrait du journal le droit des trucs.
J'ai même créé un JSBin pour cela. C'est ma première fois avec JSBin donc j'espère que je l'ai fait à droite.