web-dev-qa-db-fra.com

Javascript cryptage AES

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

105
coder

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

63
backslash17

Voici ne page de démonstration qui utilise slowAES.

slowAES était facile à utiliser. Logiquement conçu. Reasonable OO packaging. Prend en charge les boutons et leviers tels que les modes IV et Encryption. Bonne compatibilité avec .NET/C #. Le nom est ironique; il s'appelle " lent AES "car il n’est pas implémenté en C++. Mais dans mes tests, il n’était pas trop lent.

Il manque un mode ECB. Il manque aussi un mode CTR, bien que vous puissiez en créer un assez facilement avec un mode ECB, je suppose.

Il est uniquement axé sur le cryptage. Une classe complémentaire Nice qui fait RFC2898 - La dérivation de clé basée sur un mot de passe conforme, en Javascript, est disponible auprès d'Anandam . Cette paire de bibliothèques fonctionne bien avec les classes analogues .NET. Bon interop. Contrairement à SlowAES, le code Javascript PBKDF2 est sensiblement plus lent que la classe Rfc2898DeriveBytes lors de la génération de clés.

Il n’est pas surprenant que l’interopérabilité soit bonne sur le plan technique, mais le point essentiel pour moi est 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 certains cas, je ne pouvais pas trouver d’endroit pour définir le mode IV, ni le mode (CBC, BCE, etc.). Les choses n'étaient pas où je m'attendais. SlowAES n'était pas comme ça. Les propriétés étaient exactement là où je m'attendais. Il m’était facile pour moi de prendre en main, étant familiarisé avec les modèles de programmation cryptés Java et .NET).

Le PBKDF2 d'Anandam n'était pas tout à fait à ce niveau. Elle ne prenait en charge qu'un seul appel à la fonction DeriveBytes. Par conséquent, si vous devez dériver 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 cela fonctionne très bien pour cela.

[~ # ~] éditer [~ # ~] : Je mets ensemble n exemple de packaging SlowAES et une version modifiée de PBKDF2 d'Anandam dans Windows Script Components. L'utilisation de cette AES avec une clé dérivée du mot de passe indique une bonne interopérabilité avec la classe .NET RijndaelManaged.

EDIT2 : la page de démonstration montre comment utiliser ce cryptage AES à partir d'une page Web. L'utilisation des mêmes entrées (iv, clé, mode, etc.) prises en charge dans .NET vous donne une bonne interopérabilité avec la classe .NET Rijndael. Vous pouvez faire un "view source" pour obtenir le javascript pour cette page.

EDIT3
Un ajout tardif: La cryptographie Javascript considérée comme nuisible. Cela vaut la peine d'être lu.

35
Cheeso

Dans mes recherches sur le cryptage AES, j'ai trouvé cela chez des étudiants de Standford. Prétend être le plus rapide sur le marché. Prend en charge le cryptage CCM, OCB, GCM et Block. http://crypto.stanford.edu/sjcl/

25
Danny C

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

Scripts de types mobiles: AES

12
Samir Talwar

Cet article est maintenant ancien, mais crypto-js , est peut-être maintenant la bibliothèque de cryptage javascript la plus complète.

CryptoJS est une collection d'algorithmes cryptographiques implémentés en JavaScript. Il comprend les chiffres suivants: AES-128, AES-192, AES-256, DES, Triple DES, Lapin, RC4, RC4Drop et hachoirs: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA. -3 avec 224, 256, 384 ou 512 bits.

Vous voudrez peut-être consulter leur Guide de démarrage rapide , qui est également la référence du port node.js suivant.

node-cryptojs-aes est un port node.js de crypto-js

10
marcz

Récemment, j’ai eu besoin d’effectuer une interopérabilité chiffrement/déchiffrement entre javascript et python.

Plus précisément...

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 Moteur) 3) Utilisation de pycrypto

J'ai trouvé de nombreuses versions différentes de RSA et AES sur le Web et leur approche était différente, mais je n’ai pas trouvé un bon exemple d’interopérabilité de bout en bout javascript et python.

Finalement, j'ai réussi à concocter quelque chose qui répondait à mes besoins après de nombreux essais et erreurs.

Quoi qu’il en soit, j’ai retrouvé un exemple de js/webapp parlant à un moteur d’applications Google hébergé python) qui utilise AES, des clés RSA et des clés privées.

Je pensais l'inclure ici par un lien au cas où il serait utile à d'autres qui doivent accomplir la même chose.

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

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

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

edit: mis à jour très ancien et ancien lien vers la source pour pointer maintenant vers

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

8
David Kierans

À en juger par ma propre expérience, asmcrypto.js fournit l’implémentation AES la plus rapide en JavaScript (en particulier dans Firefox car elle peut exploiter pleinement asm.js dans cette situation).

Du readme:

Chrome/31.0
SHA256: 51 MiB/s (9 times faster than SJCL and CryptoJS)
AES-CBC: 47 MiB/s (13 times faster than CryptoJS and 20 times faster than SJCL)

Firefox/26.0
SHA256: 144 MiB/s (5 times faster than CryptoJS and 20 times faster than SJCL)
AES-CBC: 81 MiB/s (3 times faster than CryptoJS and 8 times faster than SJCL)

Éditer: Le API Web Cryptography est maintenant implémenté dans la plupart des navigateurs et doit être utilisé comme solution primaire si vous vous souciez de la performance. Sachez que IE11 a implémenté une version antérieure de la norme qui n’utilisait pas de promesses.

Quelques exemples peuvent être trouvés ici:

7
Joel Richard

Utilisez CryptoJS

Voici le code: https://github.com/odedhb/AES-encrypt

Et voici un exemple de travail en ligne: https://odedhb.github.io/AES-encrypt/

5
Oded Breiner

Essayez asmcrypto.js - c'est vraiment rapide.

PS: Je suis un auteur et je peux répondre à vos questions le cas échéant. Aussi, je serais ravi de recevoir vos commentaires :)

4
vibornoff
1
arun

Il existe également une librairie gratuite Stanford comme alternative à Cryptojs

http://crypto.stanford.edu/sjcl/

1
Jai

Voici la seule solution qui a fonctionné pour moi:

http://www.hanewin.net/encrypt/aes/aes.htm

C'est assez basique, mais simple à utiliser et semble bien fonctionner.

1
CpnCrunch

Une autre solution avec le support AES-256: https://github.com/digitalbazaar/forge

1
dlongley

Si vous essayez d'utiliser JavaScript pour éviter d'utiliser SSL, détrompez-vous. Il existe de nombreuses mesures intermédiaires, mais uniquement SSL fournit une communication sécurisée. Les bibliothèques de chiffrement Javascript peuvent aider contre un certain ensemble d'attaques, mais pas contre les véritables attaques man-in-the-middle.

Si vous recherchez SSL pour le moteur d'applications Google sur un domaine personnalisé, consultez wwwizer.com .

Le post suivant explique comment créer une tentative de communication sécurisée avec javascript et comment se tromper: tilisez le module de cryptage JavaScript au lieu de SSL/HTTPS

1
speedplane

http://www.movable-type.co.uk/scripts/aes.html La bibliothèque peut être utile.

1
Kirtan