Cryptage AES Javascript [fermé]
Existe-t-il une bibliothèque disponible pour le cryptage AES 256 bits en Javascript?
15 réponses
JSAES est une implémentation puissante de AES en JavaScript. http://point-at-infinity.org/jsaes/
Voici une page de démonstration qui utilise slowAES.
slowAES était facile à utiliser. Logiquement conçu. Emballage oo raisonnable. Prend en charge les boutons et les leviers comme IV et le mode de cryptage. Bonne compatibilité avec .NET / c#. Le nom est Langue-dans-la-joue; il est appelé " slow AES " parce qu'il n'est pas implémenté en C++. Mais dans mes tests, ce n'était pas d'une lenteur irréalisable.
It manque un mode ECB. Manque également un mode CTR, bien que vous pourriez construire un assez facilement donné un mode ECB, je suppose.
il est uniquement axé sur le cryptage. Une classe complémentaire agréable qui ne RFC2898 - dérivation de clé basée par mot de passe conforme, en Javascript, est disponible à partir de Anandam . Cette paire de bibliothèques fonctionne bien avec les classes analogues .NET. Bonne interopérabilité. Cependant, contrairement à SlowAES, le 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 techniquement il y ait un bon interop, mais le point clé pour moi était 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 d'entre eux, je n'ai pas pu trouver l'endroit pour mettre la IV, ou le mode (CBC, ECB, etc). Les choses n'étaient pas là où je attendu d'eux. SlowAES n'était pas comme ça. Les propriétés étaient exactement là où je m'y attendais. C'était facile pour moi de décrocher, ayant été familiarisé avec les Modèles de programmation Java et .NET crypto.
le PBKDF2 D'Anandam n'était pas tout à fait à ce niveau. Il ne supporte qu'un seul appel à la fonction DeriveBytes, donc si vous avez besoin de dériver à la fois une clé et un IV à partir d'un mot de passe, cette bibliothèque ne fonctionnera pas, inchangé. Certaines modifications mineures, et il fonctionne très bien pour ce but.
EDIT : j'ai rassemblé un exemple d'emballage SlowAES et une version modifiée de PBKDF2 D'Anandam dans les composants de Script Windows. L'utilisation de cette AES avec une clé dérivée par mot de passe montre une bonne interop avec la classe.net RijndaelManaged.
EDIT2 : de la page de démonstration montre comment utiliser ceci AES cryptage d'une page web. Utiliser les mêmes entrées (iv, clé, mode, etc.) supportées dans .NET vous donne une bonne interop avec la classe.net Rijndael. Vous pouvez faire un "view source" pour obtenir le javascript pour cette page.
EDIT3
ajout tardif: cryptographie Javascript considérée comme nuisible. mérite la lecture.
dans Mes recherches pour le cryptage AES, j'ai trouvé ça chez des étudiants de Standford. Prétend être le plus rapide. Prend en charge CCM, OCB, GCM et le cryptage de bloc. http://crypto.stanford.edu/sjcl/
googler "JavaScript AES" a trouvé plusieurs exemples. Le premier qui est apparu est conçu pour expliquer l'algorithme ainsi que de fournir une solution:
ce post est maintenant vieux, mais le crypto-js , peut être maintenant la bibliothèque de cryptage javascript la plus complète.
CryptoJS est un ensemble d'algorithmes cryptographiques mis en œuvre en JavaScript. Il comprend les Cypher suivants: AES-128, AES-192, AES-256, DES, Triple DES, Rabbit, RC4, RC4Drop et hashers: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA-3 avec 224, 256, 384, ou 512 bits.
Vous pouvez regarder leur Guide de démarrage Rapide , qui est également la référence pour le nœud suivant.js port.
nœud-cryptojs-aes est un nœud.js port of crypto-js
récemment, j'ai eu le besoin d'effectuer une certaine interopérabilité de cryptage/décryptage entre javascript et python.
spécifiquement...
1) en utilisant AES pour chiffrer en javascript et déchiffrer en python (Google App Engine) 2) en utilisant RSA pour chiffrer en javascript et déchiffrer en python (Google App Engine) 3) Utilisation de pycrypto
j'ai trouvé beaucoup et beaucoup de différentes versions de RSA et AES flottant autour du web et ils ont été tous différents dans leur approche mais je n'ai pas trouvé un bon exemple d'interopérabilité javascript et python de bout en bout.
Finalement, j'ai réussi à bricoler quelque chose qui convenait à mes besoins après beaucoup d'essais et d'erreurs.
quoi qu'il en soit, j'ai créé un exemple de JS/webapp parlant à un serveur Python hébergé par google app engine qui utilise des AES et des RSA à clé publique et privée.
je pensais l'inclure ici par lien dans cas il sera d'une utilité à d'autres qui ont besoin d'accomplir la même chose.
http://www.ipowow.com/files/aesrsademo.tar.gz
et de voir démo au rsa-aes-démo DOT appspot DOT com
edit: regarder la sortie de la console du navigateur et aussi voir la source pour obtenir quelques conseils et des messages utiles quant à ce qui se passe dans le Démo
modifier: lien mis à jour très ancien et obsolète vers la source pour maintenant pointer vers
à en juger par ma propre expérience, asmcrypto.js fournit L'implémentation AES la plus rapide en JavaScript (en particulier dans Firefox car il peut tirer pleinement parti de l'asm.js là).
dans le 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)
Edit: Le Web API de chiffrement est maintenant , mis en œuvre dans la plupart des navigateurs et devrait être utilisé comme principale solution si vous vous souciez de la performance. Soyez conscient que IE11 a mis en œuvre une version antérieure de la norme qui n'a pas utilisé de promesses.
Quelques exemples peuvent être trouvés ici:
Essayer asmcrypto.js - c'est vraiment rapide.
PS: je suis un auteur et je peux répondre à vos questions s'il y en a. Aussi, je serais heureux d'obtenir quelques commentaires :)
Use CryptoJS
voici le code: https://github.com/odedhb/AES-encrypt
Et voici un exemple de travail en ligne: https://odedhb.github.io/AES-encrypt /
http://www.movable-type.co.uk/scripts/aes.html bibliothèque peut être d'une certaine aide.
si vous essayez d'utiliser javascript pour éviter D'utiliser SSL, pensez-y. Il existe de nombreuses mesures à mi-chemin, mais seulement SSL fournit la communication sécurisée. Les bibliothèques de cryptage Javascript peuvent aider contre un certain ensemble d'attaques, mais pas une véritable attaque de l'homme-dans-le-milieu.
si vous recherchez SSL pour google app engine sur un domaine personnalisé, jetez un oeil à wwwizer.com .
Le post suivant explique comment créer une tentative de communication sécurisée avec javascript et comment s'y prendre mal: utiliser le module de cryptage JavaScript au lieu de SSL / HTTPS
Il y a aussi un Stanford free lib comme une alternative à Cryptojs
Another solution w/ AES-256 support: https://github.com/digitalbazaar/forge
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.