มีไลบรารีสำหรับการเข้ารหัส AES 256 บิตใน Javascript หรือไม่
มีไลบรารีสำหรับการเข้ารหัส AES 256 บิตใน Javascript หรือไม่
คำตอบ:
JSAES คือการนำ AES มาใช้ใน JavaScript อย่างมีประสิทธิภาพ http://point-at-infinity.org/jsaes/
นี่คือหน้าสาธิตที่ใช้ slowAES
slowAESนั้นใช้งานง่าย ออกแบบอย่างมีเหตุผล บรรจุภัณฑ์ OO ที่เหมาะสม รองรับลูกบิดและคันโยกเช่น IV และโหมดการเข้ารหัส เข้ากันได้ดีกับ. NET / C # ชื่อลิ้น - แก้ม; เรียกว่า " AES ช้า " เนื่องจากไม่ได้ใช้งานใน C ++ แต่ในการทดสอบของฉันมันไม่ได้ช้าจนทำไม่ได้
ไม่มีโหมด ECB นอกจากนี้ยังไม่มีโหมด CTR แม้ว่าคุณจะสามารถสร้างโหมด ECB ได้อย่างง่ายดาย แต่ฉันเดาว่า
เน้นการเข้ารหัสเพียงอย่างเดียว ชั้นเสริมที่ดีที่ไม่RFC2898เข้ากันใช้รหัสผ่านมาที่สำคัญใน Javascript เป็นใช้ได้จาก Anandam ไลบรารีคู่นี้ทำงานได้ดีกับคลาส. NET ที่คล้ายคลึงกัน การทำงานร่วมกันที่ดี แม้ว่าในทางตรงกันข้ามกับ SlowAES Javascript PBKDF2 นั้นช้ากว่าคลาสRfc2898DeriveBytesอย่างเห็นได้ชัดเมื่อสร้างคีย์
ไม่น่าแปลกใจที่ในทางเทคนิคมีการทำงานร่วมกันที่ดี แต่ประเด็นสำคัญสำหรับฉันคือรูปแบบที่ใช้โดย SlowAES นั้นคุ้นเคยและใช้งานง่าย ฉันพบว่าไลบรารี Javascript อื่น ๆ สำหรับ AES นั้นยากที่จะเข้าใจและใช้งาน ตัวอย่างเช่นในบางส่วนฉันไม่พบตำแหน่งที่จะตั้งค่า IV หรือโหมด (CBC, ECB ฯลฯ ) สิ่งต่างๆไม่ได้อยู่ในที่ที่ฉันคาดหวังไว้ SlowAES ไม่ได้เป็นเช่นนั้น คุณสมบัติถูกต้องตามที่ฉันคาดหวังไว้ มันเป็นเรื่องง่ายสำหรับฉันที่จะรับเพราะคุ้นเคยกับโมเดลการเขียนโปรแกรม crypto ของ Java และ. NET
PBKDF2 ของ Anandam ไม่ค่อยอยู่ในระดับนั้น รองรับการเรียกใช้ฟังก์ชัน DeriveBytes เพียงครั้งเดียวดังนั้นหากคุณต้องการรับทั้งคีย์และ IV จากรหัสผ่านไลบรารีนี้จะไม่ทำงานไม่เปลี่ยนแปลง การปรับเปลี่ยนเล็กน้อยและใช้งานได้ดีสำหรับจุดประสงค์นั้น
แก้ไข : ฉันรวบรวมตัวอย่างของบรรจุภัณฑ์SlowAESและPBKDF2ของAnandamเวอร์ชันดัดแปลงไว้ใน Windows Script Components การใช้ AES นี้กับคีย์ที่ได้รับรหัสผ่านจะแสดงการทำงานร่วมกันที่ดีกับคลาส. NET RijndaelManaged
แก้ไข 2 : หน้าสาธิตแสดงวิธีใช้การเข้ารหัส AES นี้จากหน้าเว็บ การใช้อินพุตเดียวกัน (iv, คีย์, โหมด ฯลฯ ) ที่รองรับใน. NET ช่วยให้คุณทำงานร่วมกันได้ดีกับคลาส. NET Rijndael คุณสามารถสร้าง "ดูแหล่งที่มา" เพื่อรับจาวาสคริปต์สำหรับหน้านั้น
แก้ไข
เพิ่มเติมในช่วงท้าย: การเข้ารหัส Javascript ถือว่าเป็นอันตราย คุ้มค่ากับการอ่าน
ในการค้นหาการเข้ารหัส AES ฉันพบสิ่งนี้จากนักเรียน Standford บางคน อ้างว่าเร็วที่สุด รองรับการเข้ารหัส CCM, OCB, GCM และ Block http://crypto.stanford.edu/sjcl/
Googling "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คือพอร์ต node.js ของcrypto-js
เมื่อเร็ว ๆ นี้ฉันจำเป็นต้องทำการเข้ารหัส / ถอดรหัสการทำงานร่วมกันระหว่าง javascript และ python
โดยเฉพาะ ...
1) การใช้ AES เพื่อเข้ารหัสในจาวาสคริปต์และถอดรหัสใน python (Google App Engine) 2) การใช้ RSA เพื่อเข้ารหัสในจาวาสคริปต์และถอดรหัสใน python (Google App Engine) 3) การใช้ pycrypto
ฉันพบ RSA และ AES เวอร์ชันต่างๆมากมายที่ลอยอยู่บนเว็บและพวกเขาต่างก็มีแนวทางที่แตกต่างกัน แต่ฉันไม่พบตัวอย่างที่ดีของการทำงานร่วมกันของจาวาสคริปต์และหลามแบบ end to end
ในที่สุดฉันก็สามารถรวบรวมสิ่งที่เหมาะกับความต้องการของฉันได้หลังจากลองผิดลองถูกมาหลายครั้ง
อย่างไรก็ตามฉันเคาะตัวอย่างของ js / webapp ที่พูดคุยกับโปรแกรม google app ที่โฮสต์เซิร์ฟเวอร์ python ที่ใช้ AES และคีย์สาธารณะและสิ่ง RSA คีย์ส่วนตัว
ฉันแม้ว่าฉันจะรวมไว้ที่นี่ด้วยลิงก์ในกรณีที่อาจมีประโยชน์กับผู้อื่นที่ต้องการทำสิ่งเดียวกัน
http://www.ipowow.com/files/aesrsademo.tar.gz
และดูการสาธิตได้ที่ rsa-aes-demo DOT appspot DOT com
แก้ไข: ดูที่เอาต์พุตคอนโซลของเบราว์เซอร์และดูแหล่งที่มาเพื่อรับคำแนะนำและข้อความที่เป็นประโยชน์เกี่ยวกับสิ่งที่เกิดขึ้นในการสาธิต
แก้ไข: อัปเดตลิงก์ที่เก่ามากและหมดอายุไปยังแหล่งที่มาให้ชี้ไปที่
จากประสบการณ์ของฉันเองasmcrypto.js นำเสนอการใช้งาน AES ที่เร็วที่สุดใน JavaScript (โดยเฉพาะใน 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)
แก้ไข:ขณะนี้Web Cryptography APIถูกนำไปใช้ในเบราว์เซอร์ส่วนใหญ่แล้วและควรใช้เป็นโซลูชันหลักหากคุณสนใจเกี่ยวกับประสิทธิภาพ โปรดทราบว่า IE11 ใช้มาตรฐานเวอร์ชันร่างก่อนหน้าซึ่งไม่ได้ใช้สัญญา
ตัวอย่างบางส่วนสามารถพบได้ที่นี่:
ใช้ CryptoJS
นี่คือรหัส: https://github.com/odedhb/AES-encrypt
และนี่คือตัวอย่างการทำงานออนไลน์: https://odedhb.github.io/AES-encrypt/
ลองasmcrypto.js - มันเร็วมาก
PS: ฉันเป็นผู้เขียนและฉันสามารถตอบคำถามของคุณได้หากมี นอกจากนี้ฉันยินดีที่จะรับคำติชม :)
http://www.movable-type.co.uk/scripts/aes.htmlไลบรารีอาจช่วยได้บ้าง
หากคุณกำลังพยายามใช้จาวาสคริปต์เพื่อหลีกเลี่ยงการใช้ SSL ให้คิดใหม่อีกครั้ง มีมาตรการครึ่งทางมากมาย แต่SSL เท่านั้นที่ให้การสื่อสารที่ปลอดภัย ไลบรารีการเข้ารหัส Javascript สามารถช่วยป้องกันการโจมตีบางชุดได้ แต่ไม่ใช่การโจมตีแบบ man-in-the-middle
หากคุณกำลังมองหา SSL สำหรับเครื่องยนต์แอป Google บนโดเมนที่กำหนดเองจะดูที่wwwizer.com
โพสต์ต่อไปนี้อธิบายถึงวิธีสร้างความพยายามในการสื่อสารที่ปลอดภัยด้วยจาวาสคริปต์และวิธีการทำให้ผิดพลาด: ใช้โมดูลการเข้ารหัส JavaScript แทน SSL / HTTPS
นอกจากนี้ยังมี lib ฟรีของ Stanford เป็นทางเลือกสำหรับ Cryptojs
อีกวิธีที่รองรับ AES-256: https://github.com/digitalbazaar/forge
นี่คือทางออกเดียวที่เหมาะกับฉัน:
http://www.hanewin.net/encrypt/aes/aes.htm
มันค่อนข้างธรรมดา แต่ใช้งานง่ายและดูเหมือนจะทำงานได้ดี