SHA-256 ให้ผลลัพธ์ 256 บิต = 32 ไบต์
- Hexadecimal: 256 ÷ 4 = 64 ตัวอักษร (0-9, a-f)
- Binary: 32 ไบต์
- Data Type:
CHAR(64)หรือBINARY(32)(ใช้UNHEX()แปลง)
ตัวอย่างสร้างตาราง
mysql> CREATE TABLE SHA256Demo (
-> Password VARCHAR(64) -- หรือ CHAR(64) / BINARY(32)
-> );
Insert Hash (Hex)
mysql> INSERT INTO SHA256Demo VALUES ('4e2e1a39dba84a0b5a91043bb0e4dbef23970837');
สร้าง SHA-256 ใน MySQL
mysql> SELECT SHA2('password', 256);
+------------------------------------------------------------------+
| SHA2('password', 256) |
+------------------------------------------------------------------+
| 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 |
+------------------------------------------------------------------+
เก็บเป็น Binary (ประหยัดพื้นที่ 50%)
mysql> CREATE TABLE SHA256Binary (pwd_hash BINARY(32));
mysql> INSERT INTO SHA256Binary VALUES (UNHEX(SHA2('password', 256)));
mysql> SELECT HEX(pwd_hash) FROM SHA256Binary; -- แสดงเป็น Hex กลับมา
เปรียบเทียบ Hash Algorithms
| Algorithm | Bits | Hex Chars | BINARY Size | ใช้สำหรับ Password? |
|---|---|---|---|---|
| MD5 | 128 | 32 | 16 | ❌ แตกง่าย |
| SHA-1 | 160 | 40 | 20 | ❌ แตกง่าย |
| SHA-256 | 256 | 64 | 32 | ⚠️ เร็วเกินไป (ต้อง Salt+Iterations) |
| SHA-512 | 512 | 128 | 64 | ⚠️ เร็วเกินไป |
| bcrypt | ~184 | 60 | - | ✅ ดี (Cost Factor) |
| Argon2id | Variable | ~96+ | - | ✅ สุดโปรด (PHC Winner) |
สำคัญ: อย่าเก็บ Password Hash ใน MySQL โดยตรงจาก Application ให้ Hash ใน App Layer ด้วย Argon2id/bcrypt แล้วเก็บแค่ String (CHAR/VARCHAR)