nodejs node encrypt decrypt crypto cipher javascript encryption aes

javascript - encrypt - node js md5 decrypt



Cifrado Javascript AES (15)

¿Hay una biblioteca disponible para el cifrado AES de 256 bits en Javascript?


A juzgar por mi propia experiencia, asmcrypto.js proporciona la implementación más rápida de AES en JavaScript (especialmente en Firefox ya que puede aprovechar asm.js).

Del archivo léame:

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)

Editar: La API de Web Cryptography ahora se implementa en la mayoría de los navegadores y se debe utilizar como la solución principal si le importa el rendimiento. Tenga en cuenta que IE11 implementó una versión borrador anterior de la norma que no utilizó promesas.

Algunos ejemplos se pueden encontrar aquí:



Aquí hay una página de demostración que usa slowAES.

slowAES fue fácil de usar. Lógicamente diseñado. Embalaje OO razonable. Admite mandos y palancas como modo IV y Encriptación. Buena compatibilidad con .NET / C #. El nombre es irónico; se llama "AES lento " porque no está implementado en C ++. Pero en mis pruebas no fue muy lento.

Carece de un modo ECB. También carece de un modo CTR, aunque se podría construir uno bastante fácilmente dado un modo ECB, supongo.

Se centra exclusivamente en el cifrado. Una buena clase complementaria que hace RFC2898 claves basadas en contraseñas RFC2898 RFC2898, en Javascript, está disponible en Anandam . Este par de bibliotecas funciona bien con las clases .NET análogas. Buena interoperabilidad. Aunque, a diferencia de SlowAES, el Javascript PBKDF2 es notablemente más lento que la clase Rfc2898DeriveBytes al generar claves.

No es sorprendente que técnicamente haya una buena interoperabilidad, pero el punto clave para mí fue que el modelo adoptado por SlowAES es familiar y fácil de usar. Encontré que algunas de las otras bibliotecas de Javascript para AES son difíciles de entender y usar. Por ejemplo, en algunos de ellos no pude encontrar el lugar para configurar el IV o el modo (CBC, ECB, etc.). Las cosas no estaban donde esperaba que estuvieran. SlowAES no fue así. Las propiedades estaban justo donde esperaba que estuvieran. Fue fácil para mí retomar, habiendo estado familiarizado con los modelos de criptografía Java y .NET.

El PBKDF2 de Anandam no estaba del todo en ese nivel. Solo admitía una llamada a la función DeriveBytes, por lo que si necesita derivar una clave y una IV de una contraseña, esta biblioteca no funcionará, sin cambios. Una pequeña modificación, y está funcionando bien para ese propósito.

EDITAR : He creado un ejemplo de empaquetar slowAES y una versión modificada de PBKDF2 de Anandam en Windows Script Components. El uso de este AES con una clave derivada de contraseña muestra una buena interoperabilidad con la clase .NET RijndaelManaged.

EDIT2 : la página de demostración muestra cómo usar este cifrado AES desde una página web. Usar las mismas entradas (iv, key, mode, etc.) soportadas en .NET le da una buena interoperabilidad con la clase .NET Rijndael. Puede hacer una "fuente de vista" para obtener el javascript para esa página.

EDIT3
una adición tardía: JavaScript Criptografía considerada dañina. Vale la pena leer.


En mis búsquedas de encriptación AES encontré esto de algunos estudiantes de Standford. Afirma ser el más rápido por ahí. Admite CCM, OCB, GCM y cifrado de bloques. http://crypto.stanford.edu/sjcl/


Esta publicación ahora es antigua, pero la code.google.com/p/crypto-js puede ser ahora la biblioteca de cifrado de JavaScript más completa.

code.google.com/p/crypto-js es una colección de algoritmos criptográficos implementados en JavaScript. Incluye las siguientes cifras: AES-128, AES-192, AES-256, DES, Triple DES, Conejo, RC4, RC4Drop y hashers: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA -3 con 224, 256, 384 o 512 bits.

Es posible que desee consultar su Guía de inicio rápido, que también es la referencia para el siguiente puerto node.js.

node-cryptojs-aes es un puerto node.js de code.google.com/p/crypto-js




Pruebe asmcrypto.js : es realmente rápido.

PD: Soy un autor y puedo responder sus preguntas, si las hubiera. También me gustaría recibir algunos comentarios :)


Recientemente tuve la necesidad de realizar alguna interoperabilidad de cifrado / descifrado entre javascript y python.

Específicamente...

1) Usar AES para encriptar en javascript y descifrar en python (Google App Engine) 2) Usar RSA para encriptar en javascript y descifrar en python (Google App Engine) 3) Usar pycrypto

Encontré muchas versiones diferentes de RSA y AES flotando en la web y todas fueron diferentes en su enfoque, pero no encontré un buen ejemplo de interoperabilidad de javascript y python de extremo a extremo.

Eventualmente logré improvisar algo que se adaptaba a mis necesidades después de una gran cantidad de pruebas y errores.

De todos modos, noqueé un ejemplo de js / webapp hablando con un servidor de python alojado en un motor de aplicaciones de Google que usa AES y claves públicas y claves privadas de RSA.

Pensé que lo incluiría aquí por enlace en caso de que sea de alguna utilidad para otros que necesitan lograr lo mismo.

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

y ver la demo en rsa-aes-demo DOT appspot DOT com

editar: mire la salida de la consola del navegador y también vea la fuente para obtener algunos consejos y mensajes útiles sobre lo que está sucediendo en la demostración

editar: se actualizó el enlace muy antiguo y difunto a la fuente para ahora señalar a

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


Si está intentando usar javascript para evitar el uso de SSL, piense de nuevo. Hay muchas medidas a mitad de camino, pero solo SSL proporciona una comunicación segura. Las bibliotecas de cifrado de Javascript pueden ayudar contra un cierto conjunto de ataques, pero no como un verdadero ataque de hombre en el medio.

Si está buscando SSL para el motor de aplicaciones de Google en un dominio personalizado, consulte wwwizer.com .

La siguiente publicación explica cómo crear un intento de comunicación segura con javascript y cómo hacerlo mal: utilice el módulo de cifrado de JavaScript en lugar de SSL / HTTPS.