Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

อัปเดตข้อมูลทั้งหมดเป็น MD5 Hash ใน MySQL

การเตรียมข้อมูล

mysql> CREATE TABLE DemoTable1887 (
    Password TEXT,
    HashPassword TEXT
);

mysql> INSERT INTO DemoTable1887(Password) VALUES
    ('John@9089'), ('90987_Carol'), ('656464_David_4343');

อัปเดต HashPassword ด้วย MD5

mysql> UPDATE DemoTable1887 SET HashPassword = MD5(Password);
Query OK, 3 rows affected

ผลลัพธ์

+-------------------+----------------------------------+
| Password          | HashPassword                     |
+-------------------+----------------------------------+
| John@9089         | 7f92a7e09ab1a0cd3f36ec164f035c9a |
| 90987_Carol       | 1578fa8c47f0e53a898c8ada5c0111b4 |
| 656464_David_4343 | e5ec2bd2cb55b2252be7ca9eb546659e |
+-------------------+----------------------------------+

ฟังก์ชัน Hash ใน MySQL

ฟังก์ชันOutput Lengthความปลอดภัยใช้งาน
MD5()32 Hex (128-bit)แตกได้ (Broken)Checksum, Non-crypto
SHA1()40 Hex (160-bit)อ่อนแอLegacy
SHA2(str, 256)64 Hex (256-bit)ปลอดภัยแนะนำ
SHA2(str, 512)128 Hex (512-bit)ปลอดภัยมากHigh Security

แฮชรหัสผ่านอย่างถูกต้อง (Password Hashing)

-- MySQL 8.0+ ใช้ฟังก์ชันเฉพาะ (ไม่ใช่ MD5/SHA2 ตรงๆ)
-- แฮช
SET @hash = SHA2(CONCAT('password', 'salt'), 256);

-- หรือใช้ Application Layer (bcrypt, Argon2, PBKDF2)
-- MySQL ไม่มี Built-in Bcrypt

Salt และ Pepper

-- เพิ่ม Salt ก่อน Hash
UPDATE users SET password_hash = SHA2(CONCAT(password, salt), 256);

-- เก็บ Salt แยกต่างหาก
ALTER TABLE users ADD COLUMN salt VARCHAR(32);
UPDATE users SET salt = SUBSTRING(MD5(RAND()), 1, 16);
UPDATE users SET password_hash = SHA2(CONCAT(password, salt), 256);

ข้อควรระวัง

  • MD5 ไม่ปลอดภัยสำหรับรหัสผ่าน - ใช้ SHA2 หรือ Bcrypt/Argon2 ใน Application Layer
  • ใช้ Salt ทุกครั้ง ป้องกัน Rainbow Table
  • ไม่ควรเก็บ Plain Text Password