เข้ารหัสและถอดรหัส AES
เข้ารหัสและถอดรหัสข้อความด้วย AES-128, 192 หรือ 256 ในโหมด GCM, CBC, CTR และอื่นๆ
ต้องใช้รหัสผ่านนี้อีกครั้งเพื่อถอดรหัส สิ่งที่คุณพิมพ์จะไม่ออกจากหน้านี้
ค่าเริ่มต้นของ OpenSSL คือ 10,000 ใช้ตัวเลขใดก็ได้ ยิ่งมากยิ่งทำให้เดารหัสผ่านได้ช้าลง และการถอดรหัสต้องใช้จำนวนเดียวกัน
ตัวเลือกปกติเมื่อใช้กับ OpenSSL ต้องใช้ IV และเติม padding ให้เต็มบล็อก
openssl enc -aes-256-cbc -pbkdf2 -iter 10000 -a -AOpenSSL จะถามรหัสผ่าน ให้วางข้อความลงไป หรือเพิ่มไฟล์ -in และ -out
เข้ารหัสข้อความด้วย AES-256 (หรือ AES-128, AES-192) โดยใช้รหัสผ่านหรือคีย์และ IV ของคุณเอง หรือวางข้อความเข้ารหัส AES แบบ Base64 หรือ hex เพื่อถอดรหัส เมื่อใช้รหัสผ่าน ผลลัพธ์จะอยู่ในรูปแบบเดียวกับ openssl enc -pbkdf2 คือส่วนหัว Salted__ ตามด้วย salt สุ่มขนาด 8 ไบต์และข้อความเข้ารหัส โดยคีย์และ IV ได้มาจาก PBKDF2-HMAC-SHA256 ค่าเริ่มต้นคือ AES-256 โหมด CBC พร้อม padding แบบ PKCS#7 และผลลัพธ์เป็น Base64 ซึ่งตรงกับ openssl enc -aes-256-cbc -pbkdf2 -a ส่วนโหมด GCM, CTR, CFB, OFB และ ECB ก็เลือกได้ในคลิกเดียว ผลลัพธ์อัปเดตทันทีขณะพิมพ์ ทุกอย่างเกิดขึ้นในเบราว์เซอร์ ข้อความ รหัสผ่าน และคีย์ของคุณจึงไม่ออกจากอุปกรณ์ ใช้ฟรีและไม่ต้องสมัครสมาชิก
วิธีเข้ารหัสและถอดรหัสข้อความด้วย AES
- เลือก “เข้ารหัส” หรือ “ถอดรหัส” แล้วพิมพ์ข้อความที่จะเข้ารหัส หรือวางข้อความ Base64 หรือ hex ที่จะถอดรหัส ระบบจะตรวจรูปแบบให้อัตโนมัติ
- ใส่รหัสผ่าน (ปุ่ม “สร้าง” จะสร้างรหัสผ่านที่แข็งแรงให้) หรือสลับไปที่ “คีย์และ IV (hex)” แล้วใส่หรือสร้างคีย์และ IV ตามความยาวที่แสดง
- เลือกขนาดคีย์ (128, 192 หรือ 256 บิต) และโหมด เวลาถอดรหัสต้องใช้รหัสผ่าน จำนวนรอบ ขนาดคีย์ และโหมดเดียวกับตอนเข้ารหัส
- คัดลอกหรือดาวน์โหลดผลลัพธ์ หรือกด “สลับ” เพื่อย้ายผลลัพธ์ไปเป็นอินพุตและกลับทิศทาง ในส่วน “ทำแบบเดียวกันด้วย OpenSSL” หน้านี้จะแสดงคำสั่ง openssl ที่ตรงกันโดยไม่มีรหัสผ่านของคุณ
ความสามารถ
- AES-128, AES-192 และ AES-256 ในโหมด CBC, GCM, CTR, CFB, OFB หรือ ECB
- โหมดรหัสผ่านในรูปแบบ openssl enc -pbkdf2: ส่วนหัว Salted__, salt สุ่ม 8 ไบต์ และคีย์กับ IV จาก PBKDF2-HMAC-SHA256
- PBKDF2 จำนวน 10,000 รอบ (ค่าเริ่มต้นของ OpenSSL), 100,000 หรือ 600,000 รอบ หรือจำนวนใดก็ได้สูงสุด 10 ล้านรอบ
- โหมดคีย์และ IV ใช้คีย์และ IV แบบ hex ของคุณเอง หรือสุ่มสร้างด้วยปุ่ม “สร้าง”
- AES-GCM ตรวจจับรหัสผ่านหรือคีย์ที่ผิด และการแก้ไขข้อความเข้ารหัสทุกรูปแบบ
- padding แบบ PKCS#7 หรือไม่ใช้ padding ในโหมด CBC และ ECB
- ผลลัพธ์เป็น Base64 หรือ hex และจดจำอินพุต Base64 หรือ hex ได้อัตโนมัติ
- คำสั่ง openssl enc ที่ตรงกันสำหรับทุกโหมด ยกเว้น GCM
เป็นส่วนตัวหรือไม่
ใช่ AES ทำงานด้วย WebAssembly ภายในเบราว์เซอร์ของคุณ และรหัสผ่านถูกแปลงเป็นคีย์ด้วย Web Crypto ของเบราว์เซอร์เอง ข้อความ รหัสผ่าน และคีย์ไม่เคยถูกอัปโหลดหรือบันทึก และคำสั่ง openssl ที่หน้านี้แสดงก็ไม่มีข้อมูลเหล่านี้อยู่
คำถามที่พบบ่อย
ควรใช้ AES โหมดไหน
สำหรับข้อมูลใหม่ให้ใช้ GCM เพราะนอกจากเข้ารหัสแล้ว ยังตรวจจับการแก้ไขข้อความและรหัสผ่านที่ผิดได้ เลือก CBC ซึ่งเป็นค่าเริ่มต้น เมื่ออีกฝั่งใช้ openssl enc ซึ่งอ่าน GCM ไม่ได้ ส่วน CTR, CFB หรือ OFB ให้เลือกเฉพาะเมื่อต้องให้ตรงกับระบบที่มีอยู่ และควรหลีกเลี่ยง ECB เพราะบล็อกขนาด 16 ไบต์ที่เหมือนกันจะได้ผลลัพธ์เหมือนกัน รูปแบบในข้อความจึงยังมองเห็นได้
ถอดรหัสผลลัพธ์ด้วย OpenSSL ได้ไหม
ได้ ยกเว้น GCM เมื่อใช้ค่าเริ่มต้น: echo 'U2FsdGVkX1…' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -a -A แล้ว OpenSSL จะถามรหัสผ่าน เปลี่ยน 256 และ cbc เป็นขนาดคีย์และโหมดของคุณ (ecb, ctr, cfb, ofb) เปลี่ยน -iter เป็นจำนวนรอบที่ใช้ และเพิ่ม -nopad หากปิด padding ไว้ ถ้าผลลัพธ์เป็น hex ให้ตัด -a -A ออก แล้วส่งข้อความผ่าน xxd -r -p ก่อน สำหรับโหมดคีย์และ IV ให้ใช้ -K <คีย์ hex> -iv <IV hex> แทน -pbkdf2 -iter ส่วน openssl enc ไม่รับ GCM (ไม่รองรับ AEAD cipher) ข้อความ GCM จึงอ่านได้เฉพาะที่นี่หรือในโค้ดเท่านั้น
ทำไมผลลัพธ์จึงไม่เหมือนเดิมทุกครั้ง
เพราะการเข้ารหัสด้วยรหัสผ่านแต่ละครั้งจะสุ่ม salt ใหม่ คีย์ IV และผลลัพธ์ทั้งหมดจึงเปลี่ยนทุกครั้ง แต่ทุกเวอร์ชันถอดรหัสได้เป็นข้อความเดียวกัน นี่เป็นความตั้งใจ เพื่อไม่ให้ใครรู้ได้ว่าข้อความสองข้อความเหมือนกัน ในโหมดคีย์และ IV ผลลัพธ์จะซ้ำเมื่อคีย์และ IV ซ้ำ จึงควรสร้าง IV ใหม่ทุกข้อความ การใช้ IV ซ้ำกับคีย์เดิมทำให้ CBC อ่อนแอลง และทำให้ CTR กับ GCM ไม่ปลอดภัยเลย
ทำไมจึงขึ้นว่ารหัสผ่านผิด
เพราะมีบางอย่างไม่ตรงกัน รหัสผ่าน จำนวนรอบ ขนาดคีย์ โหมด และ padding ต้องเป็นค่าเดียวกับตอนเข้ารหัสทั้งหมด และข้อความเข้ารหัสเก็บไว้เพียง salt เท่านั้น ข้อความที่ขึ้นต้นด้วย U2FsdGVkX1 แต่สร้างโดย openssl enc ที่ไม่มี -pbkdf2 หรือโดย CryptoJS ที่ใช้ passphrase จะใช้วิธีสร้างคีย์แบบเก่า (EVP_BytesToKey) ซึ่งหน้านี้อ่านไม่ได้ ให้เข้ารหัสใหม่ด้วย -pbkdf2 หรือใช้โหมดคีย์และ IV หากคุณมีคีย์และ IV ดิบ
การเข้ารหัส AES-256 ปลอดภัยไหม
ปลอดภัย AES ไม่มีวิธีโจมตีที่ใช้ได้จริงไม่ว่าจะใช้คีย์ขนาดใด จุดอ่อนอยู่ที่รหัสผ่าน ให้ใช้รหัสผ่านสุ่มที่ยาว (ปุ่ม “สร้าง” สร้างให้ได้) และเมื่อคุณควบคุมได้ทั้งสองฝั่ง ให้เพิ่มจำนวนรอบเป็น 600,000 ซึ่งเป็นค่าที่ OWASP แนะนำในปัจจุบันสำหรับ PBKDF2-HMAC-SHA256 เลือก GCM หากต้องการรู้ด้วยว่าข้อความไม่ถูกแก้ไข