เข้ารหัส / ถอดรหัส AES
วางข้อความและ passphrase เพื่อเข้ารหัสหรือถอดรหัส AES อย่างรวดเร็วด้วย PHP OpenSSL cipher ที่เลือก AES เป็น block cipher แบบสมมาตรที่ NIST กำหนดเป็นมาตรฐานใน FIPS 197 และใช้ในระบบ TLS, WPA2, VPN และ disk encryption จำนวนมาก แต่หน้านี้เป็นเครื่องมือสะดวกสำหรับข้อความความเสี่ยงต่ำ ไม่ใช่ที่เก็บ secret ที่ผ่านการ audit สำหรับไฟล์สำคัญหรือ secret ที่ต้องเก็บนาน ให้ใช้เครื่องมือ offline เช่น age, GnuPG หรือ 7-Zip
วิธีเข้ารหัสข้อความด้วย AES
-
1
เลือก OpenSSL cipher
ตัวเลือกปัจจุบันมี CBC, CTR และ GCM หลายแบบ CBC และ CTR ไม่มีการ authenticate และเครื่องมือนี้ไม่เก็บหรือตรวจสอบ tag การ authenticate ของ GCM
-
2
ใส่ passphrase
passphrase จะถูก hash ด้วย SHA-256 หนึ่งครั้งเพื่อสร้าง AES key ไม่มี PBKDF2, salt, Argon2 หรือ work factor ดังนั้นควรใช้ passphrase ที่ยาวและสุ่ม
-
3
วางข้อความความเสี่ยงต่ำ
นี่คือเครื่องมือของเรา ที่ทำงานฝั่ง server อย่าวางรหัสผ่าน production key เอกสารส่วนตัว หรือ secret ที่คุณไม่อยากส่งให้เว็บไซต์นี้
-
4
คัดลอกผลลัพธ์ Base64
ตอนเข้ารหัส เครื่องมือจะสร้าง IV แบบสุ่ม วางไว้หน้าข้อความเข้ารหัสดิบ แล้วเข้ารหัส byte รวมเป็น Base64 การถอดรหัสต้องใช้ cipher และ passphrase เดิม
เครื่องมือนี้สร้างผลลัพธ์อะไรจริง ๆ
การทำงานนี้ใช้ PHP OpenSSL เมื่อเข้ารหัส เครื่องมือจะ hash passphrase ด้วย SHA-256 สร้าง IV แบบสุ่มตามความยาวที่ cipher ที่เลือกต้องการ เข้ารหัสข้อความ แล้วคืนค่า:
Base64(IV || ข้อความเข้ารหัส)
ผลลัพธ์ ไม่มี salt, พารามิเตอร์ PBKDF2, HMAC หรือ tag การ authenticate ของ GCM จึงไม่เข้ากันกับ format จาก Web Crypto, age, GnuPG, สูตร command-line ของ OpenSSL หรือ 7-Zip
ตัวเลือก AES ในบริบท
AES มี block size คงที่ 128 bit (16 byte) และ key size มาตรฐาน 128, 192 และ 256 bit ความต่างด้านความปลอดภัยที่สำคัญตรงนี้ไม่ใช่แค่ขนาด key แต่คือข้อความที่เข้ารหัสมีการ authenticate หรือไม่
| ตัวเลือก cipher | สิ่งที่ควรรู้ในเครื่องมือนี้ |
|---|---|
| AES-128-CBC / AES-192-CBC / AES-256-CBC | mode แบบ block ที่ใช้ IV แบบสุ่มและ PKCS#7 padding ต้องมี MAC แยก เช่น HMAC-SHA-256 เพื่อจับการแก้ไขข้อมูล |
| AES-256-CTR | ทำให้ AES ทำงานคล้าย stream mode ต้องมีการ authenticate แยก และห้ามใช้ IV/counter เดิมกับ key เดิมซ้ำ |
| AES-128-GCM / AES-256-GCM | โดยปกติ GCM เป็น AEAD mode แต่ต้องเก็บและตรวจสอบ tag การ authenticate ด้วย ผลลัพธ์ของเครื่องมือนี้ไม่มี tag นั้น จึงอย่าพึ่งพาเป็น authenticated encryption |
ข้อเตือนด้านความปลอดภัย
คำแนะนำด้าน cryptographic storage ของ OWASP แนะนำให้ใช้ authenticated encryption เมื่อทำได้ หรือใช้ encryption พร้อม MAC แยกต่างหาก โปรดจำไว้เมื่อใช้เครื่องมือนี้:
- นี่คือการเข้ารหัสแบบสมมาตร - passphrase เดียวกันใช้ถอดรหัส ควรส่ง passphrase ผ่านช่องทางคนละช่องกับข้อความเข้ารหัส
- passphrase อ่อนจะกลายเป็น key อ่อนในเครื่องมือนี้ - SHA-256 เร็วและไม่มี salt หากผู้โจมตีได้ผลลัพธ์ไปก็ลองเดาได้เร็ว
- CBC และ CTR ต้องมีการยืนยันความถูกต้อง - หากไม่มี HMAC หรือ MAC อื่น ผู้โจมตีอาจแก้ข้อความเข้ารหัสได้โดยไม่ถูกตรวจพบ
- อย่าใช้ IV หรือ nonce ซ้ำกับ key เดิม - เครื่องมือสร้าง IV สุ่มใหม่ตอนเข้ารหัส แต่ข้อมูลภายนอกที่นำมาวางก็ต้องทำตามกฎเดียวกัน
- ใช้เครื่องมือที่ audit แล้วสำหรับ secret จริง - age, GnuPG และ 7-Zip จัดการ file format, metadata และ authentication ได้รอบคอบกว่า
คำถามที่พบบ่อย
component ปัจจุบัน hash passphrase ด้วย SHA-256 และใช้ byte ที่ได้เป็น key material ให้ OpenSSL ไม่ได้ใช้ PBKDF2, salt, scrypt หรือ Argon2 ดังนั้น passphrase ที่สั้นหรือใช้ซ้ำจึงเสี่ยง
ไม่ CBC และ CTR ต้องมี MAC แยก เช่น HMAC-SHA-256 แม้ GCM ปกติจะให้ AEAD authentication แต่เครื่องมือนี้ไม่เก็บหรือตรวจสอบ GCM tag ในผลลัพธ์ Base64
เกิดบน server ของเว็บไซต์เมื่อ action เรียก PHP OpenSSL นี่ไม่ใช่เครื่องมือ Web Crypto ที่ทำงานเฉพาะในเบราว์เซอร์ ดังนั้นอย่าวาง secret มูลค่าสูง private key หรือเอกสารอ่อนไหว
ผลลัพธ์ Base64 มี IV แบบสุ่มตามด้วยข้อความเข้ารหัสดิบ CBC padding อาจเพิ่ม byte และ Base64 ทำให้ข้อมูลไบนารีใหญ่ขึ้นประมาณหนึ่งในสาม รูปแบบที่บันทึกไม่มี salt หรือ authentication tag
เครื่องมือนี้จัดการเฉพาะข้อความ และควรใช้กับข้อความสั้นที่มีความเสี่ยงต่ำเท่านั้น สำหรับไฟล์หรือ secret สำคัญ ให้ใช้เครื่องมือเข้ารหัส offline ที่ผ่านการ audit เช่น age, GnuPG หรือ 7-Zip
เครื่องมือที่เกี่ยวข้อง
รหัสแปลงตัวเลขเป็นตัวอักษร
แปลงตัวเลขเป็นตัวอักษรและย้อนกลับด้วยรหัส A=1, B=2 (A1Z26) สำหรับปริศนา คำทาย และเบาะแสในห้องเอสเคปรูม
เครื่องสร้างค่าแฮช MD5
คำนวณค่า checksum แบบ MD5 ของข้อความและไฟล์เพื่อยืนยันความสมบูรณ์ โดยผลลัพธ์จะตรงกับที่ได้จากฟังก์ชัน md5sum และ openssl dgst -md5
เครื่องสร้างพาสเฟรส (Passphrase)
สร้างพาสเฟรสที่จำง่ายจากคำทั่วไปแบบสุ่ม ปรับจำนวนคำ ตัวคั่น การขึ้นต้นด้วยตัวพิมพ์ใหญ่ และตัวเลขต่อท้ายที่เลือกได้
ตัวสร้าง JWT
สร้าง JWT ที่มีการลงนาม โดยกำหนดหัวข้อ (header) แบบกำหนดเอง สิทธิ์ของพารามิเตอร์ในเนื้อหา (payload claims) การลงนามด้วย HMAC หรือ RSA รวมถึงกำหนดระยะเวลาหมดอายุและกลุ่มผู้ใช้งานที่อนุญาต เพื่อใช้ในการทดสอบ
ตัวเข้ารหัสรหัสลับ A1Z26
เข้ารหัสข้อความด้วยรหัสลับ A1Z26 (A=1, B=2, ... Z=26) หรือถอดรหัสลำดับตัวเลขกลับเป็นตัวอักษร พร้อมปรับตัวคั่นได้
เครื่องมือเข้ารหัส Polybius
เข้ารหัสอักษรละตินเป็นพิกัด Polybius หรือถอดรหัสคู่ตัวเลขที่คั่นด้วยช่องว่าง โดยใช้ตาราง 5×5 แบบคงที่ที่รวม I/J
เครื่องมือนี้มีให้บริการในภาษาอื่น
- Cifrado / Descifrado AES [ES]
- Mã hóa / giải mã AES [VI]
- AES 암호화 / 복호화 [KO]
- Enkripsi / Dekripsi AES [ID]
- Szyfrowanie i odszyfrowywanie AES [PL]
- Chiffrement / Déchiffrement AES [FR]
- Criptografar / Descriptografar AES [PT]
- AES Verschlüsseln / Entschlüsseln [DE]
- تشفير / فك تشفير AES [AR]
- AES暗号化 / 復号 [JA]
- AES versleutelen / ontsleutelen [NL]
- AES kryptera / dekryptera [SV]
- AES Encrypt / Decrypt [EN]
- AES Crittografia / Decrittografia [IT]
- Шифрование / расшифровка AES [RU]
- AES Şifrele / Şifre Çöz [TR]
- AES 加密 / 解密 [ZH]