Javascript에서 AES 256 비트 암호화에 사용할 수있는 라이브러리가 있습니까?
Javascript에서 AES 256 비트 암호화에 사용할 수있는 라이브러리가 있습니까?
답변:
JSAES는 JavaScript에서 AES의 강력한 구현입니다. http://point-at-infinity.org/jsaes/
다음 은 slowAES를 사용 하는 데모 페이지 입니다.
slowAES 는 사용하기 쉬웠습니다. 논리적으로 설계되었습니다. 합리적인 OO 패키징. IV 및 암호화 모드와 같은 노브 및 레버를 지원합니다. .NET / C #과의 우수한 호환성. 그 이름은 혀로 뺨을 맞대고 있습니다. C ++로 구현되지 않았기 때문에 " 느린 AES"라고합니다. 그러나 내 테스트에서는 비현실적으로 느리지 않았습니다.
ECB 모드가 없습니다. 또한 CTR 모드가 부족하지만 ECB 모드가 주어지면 쉽게 만들 수 있습니다.
암호화에만 중점을 둡니다. 자바 스크립트에서 RFC2898 호환 암호 기반 키 파생 을 수행하는 멋진 보완 클래스는 Anandam 에서 구할 수 있습니다 . 이 라이브러리 쌍은 유사한 .NET 클래스와 잘 작동합니다. 좋은 상호 운용성. SlowAES와 달리 Javascript PBKDF2는 키를 생성 할 때 Rfc2898DeriveBytes 클래스 보다 눈에 띄게 느립니다 .
기술적으로 좋은 상호 운용성이 있다는 것은 놀라운 일이 아니지만 저에게 핵심 포인트는 SlowAES에서 채택한 모델이 친숙하고 사용하기 쉽다는 것입니다. AES에 대한 다른 Javascript 라이브러리 중 일부는 이해하고 사용하기가 어렵습니다. 예를 들어 일부에서는 IV 또는 모드 (CBC, ECB 등)를 설정할 위치를 찾을 수 없습니다. 내가 예상했던 곳이 아니 었습니다. SlowAES는 그렇지 않았습니다. 속성은 내가 예상했던 곳에 옳았습니다. Java 및 .NET 암호화 프로그래밍 모델에 익숙했기 때문에 쉽게 익힐 수있었습니다.
Anandam의 PBKDF2는 그 수준이 아니 었습니다. DeriveBytes 함수에 대한 단일 호출 만 지원하므로 암호에서 키와 IV를 모두 파생해야하는 경우이 라이브러리는 변경되지 않고 작동하지 않습니다. 약간의 수정이 있으며 그 목적으로 잘 작동합니다.
편집 : SlowAES 와 Anandam 의 PBKDF2 수정 버전 을 Windows 스크립트 구성 요소 에 패키징 하는 예 를 모았습니다 . 이 AES를 암호 파생 키와 함께 사용하면 .NET RijndaelManaged 클래스와의 상호 운용성이 좋습니다.
EDIT2 : 데모 페이지 는 웹 페이지에서이 AES 암호화를 사용하는 방법을 보여줍니다. .NET에서 지원되는 동일한 입력 (iv, 키, 모드 등)을 사용하면 .NET Rijndael 클래스와의 좋은 상호 운용성을 제공합니다. "소스보기"를 수행하여 해당 페이지에 대한 javascript를 얻을 수 있습니다.
EDIT3
늦은 추가 : 유해한 것으로 간주되는 Javascript Cryptography. 읽을만한 가치가 있습니다.
AES 암호화 검색에서 일부 Standford 학생에게서 이것을 발견했습니다. 밖에서 가장 빠르다고 주장합니다. CCM, OCB, GCM 및 블록 암호화를 지원합니다. http://crypto.stanford.edu/sjcl/
인터넷 검색 "JavaScript AES" 에서 몇 가지 예를 찾았습니다. 팝업 된 첫 번째 항목은 알고리즘을 설명하고 솔루션을 제공하도록 설계되었습니다.
이 게시물은 이제 오래되었지만 crypto-js 는 이제 가장 완전한 자바 스크립트 암호화 라이브러리 일 수 있습니다.
CryptoJS 는 JavaScript로 구현 된 암호화 알고리즘 모음입니다. 여기에는 AES-128, AES-192, AES-256, DES, Triple DES, Rabbit, RC4, RC4Drop 및 해시 : MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA가 포함됩니다. -3 (224, 256, 384 또는 512 비트).
당신은보고 할 수 있습니다 자신의 가이드를 빠른 스타트 또한 다음과 Node.js를 포트에 대한 참조이다.
node-cryptojs-aes 는 crypto-js 의 node.js 포트입니다.
최근에 자바 스크립트와 파이썬간에 암호화 / 복호화 상호 운용성을 수행해야했습니다.
구체적으로 특별히...
1) AES를 사용하여 javascript로 암호화하고 python (Google App Engine)에서 복호화 2) RSA를 사용하여 javascript로 암호화하고 python (Google App Engine)에서 복호화 3) pycrypto 사용
웹에 떠 다니는 RSA와 AES의 다양한 버전을 많이 발견했고 접근 방식이 모두 달랐지만 javascript와 python 상호 운용성에 대한 좋은 예를 찾지 못했습니다.
결국 나는 많은 시행 착오 끝에 내 필요에 맞는 무언가를 조합 할 수 있었다.
어쨌든 나는 AES와 공개 키 및 개인 키 RSA 항목을 사용하는 Google 앱 엔진 호스팅 Python 서버와 대화하는 js / webapp의 예를 두 드렸습니다.
동일한 작업을 수행해야하는 다른 사용자에게 유용 할 경우를 대비하여 여기에 링크로 포함하겠습니다.
http://www.ipowow.com/files/aesrsademo.tar.gz
볼 데모 에서 RSA-AES-데모 DOT appspot 닷컴
편집 : 브라우저 콘솔 출력을보고 소스를보고 데모 에서 진행되는 작업에 대한 힌트와 유용한 메시지를 얻습니다.
편집 : 현재 가리키는 소스에 대한 매우 오래되고 기능이없는 링크를 업데이트했습니다.
내 경험에 비추어 볼 때 asmcrypto.js 는 JavaScript에서 가장 빠른 AES 구현을 제공합니다 (특히 Firefox에서 asm.js를 완전히 활용할 수 있기 때문에).
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)
편집 : 웹 암호화 API는 이제 대부분의 브라우저에서 구현 및 성능에 대해 걱정하는 경우 기본 솔루션으로 사용되어야한다. IE11은 promise를 사용하지 않는 표준 초안 버전을 구현했습니다.
여기에서 몇 가지 예를 찾을 수 있습니다.
CryptoJS 사용
코드는 다음과 같습니다 : https://github.com/odedhb/AES-encrypt
그리고 여기에 온라인 작업 예제가 있습니다 : https://odedhb.github.io/AES-encrypt/
asmcrypto.js를 사용 해보세요 . 정말 빠릅니다.
추신 : 저는 저자이고 질문이 있으면 답변 해 드릴 수 있습니다. 또한 피드백을 주시면 기쁩니다 :)
http://www.movable-type.co.uk/scripts/aes.html 라이브러리가 도움이 될 수 있습니다.
SSL 사용을 피하기 위해 자바 스크립트를 사용하려는 경우 다시 생각해보십시오. 많은 중간 조치가 있지만 SSL 만이 보안 통신을 제공합니다. Javascript 암호화 라이브러리는 특정 공격 집합에 대해 도움이 될 수 있지만 진정한 중간자 공격은 아닙니다.
맞춤 도메인에서 Google 앱 엔진 용 SSL을 찾고 있다면 wwwizer.com을 살펴보세요 .
다음 게시물은 자바 스크립트로 보안 통신 시도를 생성하는 방법과이를 잘못하는 방법을 설명합니다. SSL / HTTPS 대신 자바 스크립트 암호화 모듈 사용
Cryptojs의 대안으로 Stanford 무료 라이브러리도 있습니다.
AES-256 지원이 포함 된 또 다른 솔루션 : https://github.com/digitalbazaar/forge
나를 위해 일한 유일한 솔루션은 다음과 같습니다.
http://www.hanewin.net/encrypt/aes/aes.htm
매우 기본적이지만 사용하기 쉽고 잘 작동하는 것 같습니다.