114 votes

Cryptage AES en Javascript

Existe-t-il une bibliothèque disponible pour le chiffrement AES 256-bits en Javascript ?

0 votes

Voici ce dont vous avez besoin pour le cryptage AES en utilisant crypto-js </script" rel="nofollow noreferrer">cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/‌​…</a>> <script> var encryptedAES = CryptoJS.AES.encrypt("Message", "Mot de passe"); var decrypted = CryptoJS.AES.decrypt(encryptedAES.toString(), "Mot de passe"); console.log("Crypté: ", encryptedAES.toString()); console.log("Décrypté: ", decrypted.toString(CryptoJS.enc.Utf8));

0 votes

Il y a aussi la Stanford Javascript Crypto Library (SJCL) : crypto.stanford.edu/sjcl

0 votes

70voto

backslash17 Points 2770

JSAES est une implémentation puissante de AES en JavaScript. http://point-at-infinity.org/jsaes/

35 votes

JSAES est sous licence GNU GPL - par conséquent, il n'est pas utilisable pour certains projets.

0 votes

Comment puis-je spécifier un "mode de fonctionnement" et un VI ? On dirait que ce n'est pas une option.

11 votes

Il s'agit maintenant d'une ressource très utile et riche en fonctionnalités code.google.com/p/crypto-js

37voto

Cheeso Points 87022

Voici une page de démonstration qui utilise slowAES.

slowAES était facile à utiliser. Conçu de manière logique. Emballage OO raisonnable. Supporte des boutons et des leviers comme IV et le mode de chiffrement. Bonne compatibilité avec .NET/C#. Le nom est ironique; il s'appelle "slow AES" car il n'est pas implémenté en C++. Mais dans mes tests, ce n'était pas lent de manière impraticable.

Il manque un mode ECB. Il manque également un mode CTR, bien que vous puissiez en construire un assez facilement en utilisant un mode ECB, je suppose.

Il est uniquement axé sur le chiffrement. Une belle classe complémentaire qui effectue une dérivation de clé basée sur un mot de passe conforme à RFC2898, en Javascript, est disponible chez Anandam. Ce duo de bibliothèques fonctionne bien avec les classes .NET analogues. Bonne interopérabilité. Bien que, contrairement à SlowAES, le PBKDF2 Javascript soit nettement plus lent que la classe Rfc2898DeriveBytes lors de la génération de clés.

Il n'est pas surprenant qu'il y ait une bonne interopérabilité sur le plan technique, mais le point clé pour moi était que le modèle adopté par SlowAES est familier et facile à utiliser. J'ai trouvé que certaines des autres bibliothèques Javascript pour AES étaient difficiles à comprendre et à utiliser. Par exemple, dans certaines d'entre elles, je ne pouvais pas trouver l'endroit où définir l'IV ou le mode (CBC, ECB, etc). Les choses n'étaient pas là où je m'attendais à les trouver. SlowAES n'était pas comme ça. Les propriétés étaient là où je m'attendais à les trouver. C'était facile pour moi de comprendre, ayant l'habitude des modèles de programmation crypto Java et .NET.

Le PBKDF2 d'Anandam n'était pas tout à fait à ce niveau. Il ne prenait en charge qu'un seul appel à la fonction DeriveBytes, donc si vous devez dériver à la fois une clé et un IV à partir d'un mot de passe, cette bibliothèque ne fonctionnera pas sans modification. Quelques légères modifications, et ça fonctionne très bien à cette fin.

MODIFICATION: J'ai mis en place un exemple d'emballage de SlowAES et d'une version modifiée du PBKDF2 d'Anandam dans des composants Windows Script. En utilisant cet AES avec une clé dérivée d'un mot de passe, on obtient une bonne interopérabilité avec la classe .NET RijndaelManaged.

MODIFICATION 2: la page de démonstration montre comment utiliser ce chiffrement AES à partir d'une page Web. Utiliser les mêmes entrées (iv, clé, mode, etc) prises en charge dans .NET vous offre une bonne interopérabilité avec la classe .NET Rijndael. Vous pouvez consulter le code source pour obtenir le javascript de cette page.

MODIFICATION 3
un ajout tardif: La cryptographie Javascript considérée comme néfaste. Ça vaut la peine d'être lu.

8 votes

1 votes

Je vois un cas d'utilisation valide - une application HTML 5 dans laquelle tous les fichiers sont stockés localement. Si les fichiers locaux peuvent être détournés, alors vous êtes condamné de toute façon ;-).

8 votes

À propos de edit3 lien, c'est un morceau de merde d'un article... la moitié de ses déclarations sont complètement fausses!

29voto

Danny C Points 2042

Dans mes recherches sur le chiffrement AES, j'ai trouvé ceci de la part de quelques étudiants de Stanford. Prétend être le plus rapide disponible. Prend en charge CCM, OCB, GCM et le chiffrement par bloc. http://crypto.stanford.edu/sjcl/

0 votes

C'est de ça que je parle!

5 votes

La documentation est insuffisante et il est difficile à utiliser. Comment modifiez-vous la longueur de la clé ? J'ai cherché dans les documents et je n'ai pas réussi à comprendre dans un délai raisonnable. De plus, lorsque vous chiffrez quelque chose, vous obtenez un tableau de paires clé-valeur renvoyé, mais les documents ne semblent pas expliquer cela. J'ai fini par utiliser la bibliothèque movable type.

0 votes

Et cela n'est pas asynchrone, donc si vous cryptez ou décryptez une chaine plus longue par exemple avec AES-CBC, alors cela bloque l'interface utilisateur.

13voto

Samir Talwar Points 9307

Rechercher "JavaScript AES" a trouvé plusieurs exemples. Le premier qui est apparu est conçu pour expliquer l'algorithme ainsi que fournir une solution :

Scripts Movable Type : AES

1 votes

Je n'ai pas réussi à comprendre comment définir le vecteur d'initialisation dans cette bibliothèque. De plus, ce n'est pas très orienté objet.

0 votes

L'équivalent de l'IV en mode compteur est le nonce. Cette implémentation a été reformulée pour être plus orientée objet. Il inclut uniquement le mode de fonctionnement du compteur (CTR).

0 votes

Cela fonctionne assez bien, sauf qu'il n'a pas de mode ECB.

9voto

Dave Kierans Points 641

Récemment, j'ai eu besoin d'effectuer une certaine interopérabilité de chiffrement/déchiffrement entre JavaScript et Python.

En particulier...

1) Utiliser AES pour chiffrer en JavaScript et déchiffrer en python (Google App Engine) 2) Utiliser RSA pour chiffrer en JavaScript et déchiffrer en python (Google App Engine) 3) Utiliser pycrypto

J'ai trouvé de nombreuses versions différentes de RSA et AES circulant sur le web et elles étaient toutes différentes dans leur approche, mais je n'ai pas trouvé un bon exemple d'interopérabilité JavaScript et Python de bout en bout.

J'ai finalement réussi à bricoler quelque chose qui répondait à mes besoins après beaucoup d'essais et d'erreurs.

Quoi qu'il en soit, j'ai préparé un exemple d'une application Web js qui communique avec un serveur python hébergé sur Google App Engine qui utilise AES et des clés publique et privée RSA.

Je pensais le inclure ici par lien au cas où cela pourrait être utile à d'autres personnes qui ont besoin d'accomplir la même chose.

http://www.ipowow.com/files/aesrsademo.tar.gz

et voir démo sur rsa-aes-demo POINT appspot POINT com

éditer: regardez la sortie de la console du navigateur et consultez également la source pour obtenir des indices et des messages utiles sur ce qui se passe dans la démo

éditer: lien très ancien et obsolète mis à jour pour pointer désormais vers

https://sestertii.com/files/aesrsademo.tar.gz

1 votes

Merci BEAUCOUP pour ça! Je n'arrivais pas du tout à faire en sorte que mon aes javascript communique avec mon aes python.

1 votes

J'ai essayé toute la nuit (avec pycrypto et d'autres) de faire ce que votre code m'a aidé à accomplir en 10 minutes. Merci BEAUCOUP!

1 votes

Pour une raison quelconque, j'ai réussi à faire fonctionner RSA facilement mais AES est un vrai casse-tête. Merci pour ça!!!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X