Comment décrypter le message avec CryptoJS AES. J'ai un travail Ruby exemple
Je suis en mesure de décrypter AES message chiffré avec Ruby comme ceci:
require 'openssl'
require 'base64'
data = "IYkyGxYaNgHpnZWgwILMalVFmLWFgTCHCZL9263NOcfSo5lBjAzOZAtF5bF++R0Bi+9c9E+p3VEr/xvj4oABtRWVJ2wlWzLbYC2rKFk5iapFhb7uZCUpO4w4Su3a5QFa2vInjYueziRoqySZd/DpstMJ8rsJ94VGizFFFZ1l0sw1ax+wfBAv5+wHs/hlnHi/ea66KBO3rgXKahvV28h+4bh5etc8RCrmiiNbfg6Oj0jQJDjdYIdW8T9YPOI9E1hih8lbfRnMWcOFJgYekfLpoy5LI525UGnlM46J1k6ekLqsn9FqvbiOOoLgqa4YqBm1i9P0ePyjkME+t+RiL8xXX+ItgOYr9G7kM64wlTJPCW8B/crmUdmGzQNC/hD/u/8wfHBS2f8u6OtQMG/+Kpk1oju8lcUZGI/4S8A6/OuktvQr2zgnbs2aADMrM37Oait/pJ3G73S7NwVT8EaK+X43c0C/fUvW2/bD/rqCNpAh9WQlz4Cj6JHwjbmwuind6aCimF1tHjXuR9FXu+g17sPT4ZkKZ6aeBG+m170XdCGn2hVM0wH1rh3VeCG2u/JFqfuGKGSoqeHeNY/icu9pEhtZDzHd7aPoaMXcWvXC9PjooBf7GM1EPacSdnon1kBobjtKSt1l15DjO5TMrJoX7VO7GotQwo+uI/u5Kop01hBXxyxyggl1/8N0ESohPJoqLDrIwvbGK5kW4B49FVPnx9CMvjZDdSsoxPAh+hx6SPe8Hj0Nx4bRs06cbtOkte/V8QSYIqjiJDleEqPrdiKlvgToZz9L29ZR/3Ln65qU1sq7q9c0SEYxIopV7TdTjFS7y76zDPFZkhzc3DjfLtJo/M1hdtt648APcZdmAIgWH6fh3eJZ0qbiPh8RStYH7I2COmnlMw4+t/B5mlhYVSgwPK2Ir736Mh+P9Bw0fF8r9Ghhs4AJzpU0RiK9d1tCsrLfK/hSRwTXhtsSB6eDWEGkO7oeEIz43mgn0sv3SrA9JNHzYkg="
key = "2e35f242a46d67eeb74aabc37d5e5d05"
aes = OpenSSL::Cipher::Cipher.new('aes-128-cbc')
aes.decrypt
aes.key = key.scan(/../).collect{ |x| x.hex }.pack('c*')
aes.iv = Base64.decode64(data)[0...16]
puts aes.update(Base64.decode64(data)[16..-1]) + aes.final
# => JSON data...
Étant nouveau CryptoJS je n'arrive pas à mettre ensemble une alternative de travail. Voici ce que j'ai fait jusqu'à présent:
data = "IYkyGxYaNgHpnZWgwILMalVFmLWFgTCHCZL9263NOcfSo5lBjAzOZAtF5bF++R0Bi+9c9E+p3VEr/xvj4oABtRWVJ2wlWzLbYC2rKFk5iapFhb7uZCUpO4w4Su3a5QFa2vInjYueziRoqySZd/DpstMJ8rsJ94VGizFFFZ1l0sw1ax+wfBAv5+wHs/hlnHi/ea66KBO3rgXKahvV28h+4bh5etc8RCrmiiNbfg6Oj0jQJDjdYIdW8T9YPOI9E1hih8lbfRnMWcOFJgYekfLpoy5LI525UGnlM46J1k6ekLqsn9FqvbiOOoLgqa4YqBm1i9P0ePyjkME+t+RiL8xXX+ItgOYr9G7kM64wlTJPCW8B/crmUdmGzQNC/hD/u/8wfHBS2f8u6OtQMG/+Kpk1oju8lcUZGI/4S8A6/OuktvQr2zgnbs2aADMrM37Oait/pJ3G73S7NwVT8EaK+X43c0C/fUvW2/bD/rqCNpAh9WQlz4Cj6JHwjbmwuind6aCimF1tHjXuR9FXu+g17sPT4ZkKZ6aeBG+m170XdCGn2hVM0wH1rh3VeCG2u/JFqfuGKGSoqeHeNY/icu9pEhtZDzHd7aPoaMXcWvXC9PjooBf7GM1EPacSdnon1kBobjtKSt1l15DjO5TMrJoX7VO7GotQwo+uI/u5Kop01hBXxyxyggl1/8N0ESohPJoqLDrIwvbGK5kW4B49FVPnx9CMvjZDdSsoxPAh+hx6SPe8Hj0Nx4bRs06cbtOkte/V8QSYIqjiJDleEqPrdiKlvgToZz9L29ZR/3Ln65qU1sq7q9c0SEYxIopV7TdTjFS7y76zDPFZkhzc3DjfLtJo/M1hdtt648APcZdmAIgWH6fh3eJZ0qbiPh8RStYH7I2COmnlMw4+t/B5mlhYVSgwPK2Ir736Mh+P9Bw0fF8r9Ghhs4AJzpU0RiK9d1tCsrLfK/hSRwTXhtsSB6eDWEGkO7oeEIz43mgn0sv3SrA9JNHzYkg=";
key = "2e35f242a46d67eeb74aabc37d5e5d05";
CryptoJS.AES.decrypt(atob(data).substring(16), key, {
iv: atob(cipher).substring(0, 16),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
Ne CryptoJS attendre de données, de clés et de vecteur d'initialisation dans certains de manière différente? Comme je le comprends, le IV sont les 16 premiers octets de données.
Quelle erreur avez-vous observé? Ou faut-il produire de la mauvaise sortie?
Lorsque j'exécute son code, à son exemple, produit de la mauvaise sortie (comme il le décrit).
Lorsque j'exécute son code, à son exemple, produit de la mauvaise sortie (comme il le décrit).
OriginalL'auteur Priit | 2013-02-19
Vous devez vous connecter pour publier un commentaire.
Cela semble fonctionner pour moi (écrit décodé chaîne de la console):
Les choses importantes sont à spécifiez pas de sel dans votre entrée et de passer la clé comme un WordArray comme jlvaquero dit. Il y a probablement un peu de l'efficacité des améliorations à apporter, par exemple, je devine qu'il y a un moyen plus simple pour convertir une chaîne en un WordArray que d'aller en base64 et le dos, mais au moins il a réussi à les décode. J'ai levé le hex2a fonction de StackOverflow question Mot de Tableau de String.
Edit: j'ai compris comment faire pour convertir des chaînes en WordArrays et vice-versa avec CryptoJS de sorte que le supplément base64 encode/décode et hex-ASCII ne sont pas nécessaires. Aussi il s'avère que le sel de la propriété n'a pas besoin d'être spécifié. C'est plus compact et efficace:
Bien fait 🙂 Merci!
Vous pouvez empêcher l'extra Base64 de codage/décodage à l'aide de CryptoJS.enc.Latin1.parse( binaryData ) pour convertir la chaîne binaire de WordArray.
juste une remarque: Ne conservez PAS vos clés dans le code! C'est un énorme risque de sécurité.
Comment dois-je fournir les clés sans coder en dur dans le js ?
OriginalL'auteur rhashimoto
Cela fonctionne pour le décryptage à l'aide de javascript.
Suppose que je suis un peu en retard à la fête.
a très bien fonctionné pour mes fins, je vous remercie
si simple et fonctionne parfaitement
Quand je fais ce
decrypted
est juste une chaîne vide. Ai-je raté quelque chose?OriginalL'auteur rkj
pour la hex2a fournie par un autre utilisateur, il peut ne pas fonctionner si le code ascii est plus de 128 (j'.e texte contient les chinois , etc)
vous pouvez utiliser le suivre pour retourner bon unicode
OriginalL'auteur chings228
OriginalL'auteur Anup Shetty
Code-seules réponses sont découragés. Veuillez cliquer sur modifier et d'ajouter quelques mots résumant la manière dont votre code traite de la question, ou peut-être expliquer comment votre réponse diffère de la précédente réponse/réponses. Merci
OriginalL'auteur Marshall Takudzwa Chabanga