Existe-t-il une bibliothèque disponible pour le cryptage AES 256 bits en Javascript?
Existe-t-il une bibliothèque disponible pour le cryptage AES 256 bits en Javascript?
Réponses:
JSAES est une puissante implémentation d'AES en JavaScript. http://point-at-infinity.org/jsaes/
Voici une page de démonstration qui utilise slowAES.
slowAES était facile à utiliser. Conçu de manière logique. 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 ironique; il est appelé " AES lent " car il n'est pas implémenté en C ++. Mais dans mes tests, ce n'était pas trop lent.
Il manque un mode ECB. Il manque également un mode CTR, bien que vous puissiez en créer un assez facilement avec un mode ECB, je suppose.
Il se concentre uniquement sur le cryptage. Une belle classe complémentaire qui fait la dérivation de clé basée sur un mot de passe conforme à la RFC2898, en Javascript, est disponible auprès d'Anandam . Cette paire de bibliothèques fonctionne bien avec les classes .NET analogues. Bonne interopérabilité. Cependant, contrairement à SlowAES, le Javascript PBKDF2 est sensiblement plus lent que le Rfc2898DeriveBytes classe lors de la génération de clés.
Il n'est pas surprenant que techniquement l'interopérabilité soit bonne, 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 certains d'entre eux, je n'ai pas pu trouver l'emplacement pour régler l'IV, ou le mode (CBC, ECB, etc.). Les choses n'étaient pas là où je m'attendais à ce qu'elles soient. SlowAES n'était pas comme ça. Les propriétés étaient exactement là où je m'attendais à ce qu'elles soient. C'était facile pour moi de comprendre, ayant été familier avec les modèles de programmation cryptographique Java et .NET.
Le PBKDF2 d'Anandam n'était pas tout à fait à ce niveau. Il n'a pris en charge qu'un seul appel à la fonction DeriveBytes, donc si vous devez dériver à la fois une clé et un IV d'un mot de passe, cette bibliothèque ne fonctionnera pas, inchangée. Une légère modification, et cela fonctionne très bien à cette fin.
EDIT : J'ai rassemblé un exemple de packaging SlowAES et une version modifiée du PBKDF2 d'Anandam dans les composants de script Windows. L'utilisation de cet AES avec une clé dérivée d'un mot de passe montre une bonne interaction 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 une "vue source" pour obtenir le javascript de cette page.
EDIT3
un ajout tardif: la cryptographie Javascript est considérée comme nuisible. Vaut la lecture.
Dans mes recherches de cryptage AES, j'ai trouvé cela chez certains étudiants de Standford. Prétend être le plus rapide là-bas. Prend en charge le cryptage CCM, OCB, GCM et Block. http://crypto.stanford.edu/sjcl/
Google "JavaScript AES" a trouvé plusieurs exemples. Le premier qui est apparu est conçu pour expliquer l'algorithme et fournir une solution:
Ce message est maintenant vieux, mais le 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 cyphers suivants: AES-128, AES-192, AES-256, DES, Triple DES, Rabbit, RC4, RC4Drop et les hachages: 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 pour le port node.js suivant.
node-cryptojs-aes est un port node.js de crypto-js
Récemment, j'ai eu le besoin d'effectuer une interopérabilité de cryptage / décryptage entre javascript et python.
Plus précisément...
1) Utiliser AES pour crypter en javascript et décrypter en python (Google App Engine) 2) Utiliser RSA pour crypter en javascript et décrypter en python (Google App Engine) 3) Utiliser pycrypto
J'ai trouvé beaucoup de versions différentes de RSA et AES flottant sur le Web et elles étaient toutes différentes dans leur approche, mais je n'ai pas trouvé un bon exemple d'interopérabilité de bout en bout javascript et python.
Finalement, j'ai réussi à bricoler quelque chose qui convenait à mes besoins après de nombreux essais et erreurs.
Quoi qu'il en soit, j'ai donné un exemple de js / webapp parlant à un serveur python hébergé par le moteur d'application Google qui utilise AES et des éléments de clé publique et de clé privée RSA.
Je pensais que je l'inclurais ici par lien au cas où cela serait utile à d'autres qui auraient besoin d'accomplir la même chose.
http://www.ipowow.com/files/aesrsademo.tar.gz
et voir la démo sur rsa-aes-demo DOT appspot DOT com
modifier: regardez la sortie de la console du navigateur et affichez également la source pour obtenir des conseils et des messages utiles sur ce qui se passe dans le démo
edit: lien très ancien et obsolète mis à jour vers la source pour pointer maintenant 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 pleinement exploiter asm.js).
Depuis 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: L' API de cryptographie Web est désormais implémentée dans la plupart des navigateurs et doit être utilisée comme solution principale si vous vous souciez des performances. Sachez que IE11 a implémenté une version préliminaire de la norme qui n'utilisait pas de promesses.
Quelques exemples peuvent être trouvés ici:
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/
Essayez asmcrypto.js - c'est vraiment rapide.
PS: Je suis auteur et je peux répondre à vos questions le cas échéant. Je serais également heureux de recevoir des commentaires :)
La bibliothèque http://www.movable-type.co.uk/scripts/aes.html peut être utile.
Si vous essayez d'utiliser javascript pour éviter d'utiliser SSL, détrompez-vous. Il existe de nombreuses mesures à mi-chemin, mais seul SSL fournit une communication sécurisée. Les bibliothèques de chiffrement Javascript peuvent aider contre un certain ensemble d'attaques, mais pas contre une véritable attaque de type "man-in-the-middle".
Si vous recherchez SSL pour le moteur d'application Google sur un domaine personnalisé, jetez un œil à wwwizer.com .
Le post suivant explique comment créer une tentative de communication sécurisée avec javascript et comment se tromper: utilisez le module de cryptage JavaScript au lieu de SSL / HTTPS
Il existe également une bibliothèque gratuite de Stanford comme alternative à Cryptojs
Une autre solution avec support AES-256: 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.