Existe uma biblioteca disponível para criptografia AES 256 bits em Javascript?
Existe uma biblioteca disponível para criptografia AES 256 bits em Javascript?
Respostas:
JSAES é uma implementação poderosa de AES em JavaScript. http://point-at-infinity.org/jsaes/
Aqui está uma página de demonstração que usa slowAES.
slowAES foi fácil de usar. Projetado de forma lógica. Embalagem OO razoável. Suporta botões e alavancas como modo IV e criptografia. Boa compatibilidade com .NET / C #. O nome é irônico; é chamado de " AES lento " porque não é implementado em C ++. Mas em meus testes não foi impraticávelmente lento.
Ele não possui um modo de ECB. Também não tem um modo CTR, embora você possa construir um facilmente com um modo ECB, eu acho.
É focado exclusivamente na criptografia. Uma boa classe complementar que faz derivação de chave baseada em senha compatível com RFC2898 , em Javascript, está disponível no Anandam . Este par de bibliotecas funciona bem com classes .NET análogas. Boa interoperabilidade. Porém, em contraste com SlowAES, o Javascript PBKDF2 é visivelmente mais lento do que a classe Rfc2898DeriveBytes ao gerar chaves.
Não é surpreendente que, tecnicamente, haja uma boa interoperabilidade, mas o ponto-chave para mim foi que o modelo adotado pelo SlowAES é familiar e fácil de usar. Achei algumas das outras bibliotecas Javascript para AES difíceis de entender e usar. Por exemplo, em alguns deles não consegui encontrar o local para configurar o IV, nem a modalidade (CBC, ECB, etc). As coisas não estavam onde eu esperava. SlowAES não era assim. As propriedades estavam exatamente onde eu esperava que estivessem. Foi fácil para mim aprender, por estar familiarizado com os modelos de programação de criptografia Java e .NET.
O PBKDF2 de Anandam não estava exatamente nesse nível. Suportava apenas uma única chamada para a função DeriveBytes, então se você precisar derivar uma chave e um IV de uma senha, esta biblioteca não funcionará, inalterada. Uma ligeira modificação, e está funcionando bem para esse propósito.
EDITAR : Eu coloquei um exemplo de empacotamento do SlowAES e uma versão modificada do PBKDF2 do Anandam em componentes de script do Windows. Usar este AES com uma chave derivada de senha mostra uma boa interoperabilidade com a classe .NET RijndaelManaged.
EDIT2 : a página de demonstração mostra como usar a criptografia AES de uma página da web. Usar as mesmas entradas (iv, chave, modo, etc.) suportadas no .NET oferece uma boa interoperabilidade com a classe .NET Rijndael. Você pode fazer uma "visualização da fonte" para obter o javascript para essa página.
EDIT3
uma adição tardia: criptografia Javascript considerada prejudicial. Vale a pena ler.
Em minhas pesquisas por criptografia AES, encontrei isso de alguns alunos de Standford. Afirma ser mais rápido lá fora. Suporta criptografia CCM, OCB, GCM e Block. http://crypto.stanford.edu/sjcl/
Googling "JavaScript AES" encontrou vários exemplos. O primeiro que apareceu foi projetado para explicar o algoritmo, bem como fornecer uma solução:
Este post agora é antigo, mas o crypto-js , pode ser agora a biblioteca de criptografia javascript mais completa.
CryptoJS é uma coleção de algoritmos criptográficos implementados em JavaScript. Inclui as seguintes cifras: AES-128, AES-192, AES-256, DES, Triple DES, Rabbit, RC4, RC4Drop e hashers: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA -3 com 224, 256, 384 ou 512 bits.
Você pode querer dar uma olhada no Guia de início rápido, que também é a referência para a seguinte porta node.js.
node-cryptojs-aes é uma porta node.js de crypto-js
Recentemente, tive a necessidade de executar alguma interoperabilidade de criptografia / descriptografia entre javascript e python.
Especificamente...
1) Usando AES para criptografar em javascript e descriptografar em python (Google App Engine) 2) Usando RSA para criptografar em javascript e descriptografar em python (Google App Engine) 3) Usando pycrypto
Encontrei muitas e muitas versões diferentes de RSA e AES flutuando pela web e todas eram diferentes em sua abordagem, mas não encontrei um bom exemplo de interoperabilidade de javascript e python de ponta a ponta.
Por fim, consegui remendar algo que atendesse às minhas necessidades depois de muitas tentativas e erros.
De qualquer forma, criei um exemplo de um js / webapp conversando com um servidor python hospedado no google app engine que usa AES e chaves públicas e privadas RSA.
Pensei em incluí-lo aqui por meio de um link, caso seja de alguma utilidade para outras pessoas que precisam realizar a mesma coisa.
http://www.ipowow.com/files/aesrsademo.tar.gz
e veja a demonstração em rsa-aes-demo DOT appspot DOT com
editar: veja a saída do console do navegador e também veja o código-fonte para obter algumas dicas e mensagens úteis sobre o que está acontecendo na demonstração
editar: link muito antigo e extinto atualizado para a fonte para agora apontar para
A julgar por minha própria experiência, o asmcrypto.js fornece a implementação AES mais rápida em JavaScript (especialmente no Firefox, pois pode aproveitar totalmente o asm.js lá).
Do leia-me:
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: A API de criptografia da Web agora está implementada na maioria dos navegadores e deve ser usada como a solução principal se você se preocupa com o desempenho. Esteja ciente de que o IE11 implementou uma versão preliminar anterior do padrão que não usava promessas.
Alguns exemplos podem ser encontrados aqui:
Use CryptoJS
Aqui está o código: https://github.com/odedhb/AES-encrypt
E aqui está um exemplo de trabalho online: https://odedhb.github.io/AES-encrypt/
Experimente asmcrypto.js - é muito rápido.
PS: Eu sou um autor e posso responder às suas perguntas, se houver. Também ficaria feliz em receber algum feedback :)
http://www.movable-type.co.uk/scripts/aes.html biblioteca pode ser de alguma ajuda.
Se você está tentando usar javascript para evitar o SSL, pense novamente. Existem muitas medidas intermediárias, mas apenas o SSL fornece comunicação segura. Bibliotecas de criptografia Javascript podem ajudar contra um certo conjunto de ataques, mas não um verdadeiro ataque de intermediário.
Se você estiver procurando SSL para google app engine em um domínio personalizado, dê uma olhada em wwwizer.com .
A postagem a seguir explica como criar uma tentativa de comunicação segura com javascript e como errar: Use o módulo de criptografia JavaScript em vez de SSL / HTTPS
Há também uma biblioteca gratuita de Stanford como alternativa ao Cryptojs
Outra solução com suporte AES-256: https://github.com/digitalbazaar/forge
Aqui está a única solução que funcionou para mim:
http://www.hanewin.net/encrypt/aes/aes.htm
É bastante básico, mas simples de usar e parece funcionar bem.