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

Base64 Encode/Decode ใน MySQL ด้วย TO_BASE64() และ FROM_BASE64()

MySQL 5.6+ มีฟังก์ชัน Built-in สำหรับ Base64 Encoding/Decoding: TO_BASE64() และ FROM_BASE64()

รูปแบบคำสั่ง

Encode: ข้อความ → Base64

SELECT TO_BASE64('string_value') AS base64_encoded;

Decode: Base64 → ข้อความ

SELECT FROM_BASE64('base64_string') AS decoded_string;

ตัวอย่างพื้นฐาน

Encode

mysql> SELECT TO_BASE64('Password') AS Base64EncodeValue;
+-------------------+
| Base64EncodeValue |
+-------------------+
| UGFzc3dvcmQ=      |
+-------------------+
1 row in set (0.00 sec)

Decode

mysql> SELECT FROM_BASE64('UGFzc3dvcmQ=') AS Base64DecodeValue;
+-------------------+
| Base64DecodeValue |
+-------------------+
| Password          |
+-------------------+
1 row in set (0.00 sec)

ใช้กับคอลัมน์ตาราง

1. สร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE Base64Demo (ProductId VARCHAR(100));
Query OK, 0 rows affected (0.54 sec)

mysql> INSERT INTO Base64Demo VALUES ('321Product'), ('Product456'), ('654Product');

2. Encode ทั้งคอลัมน์

mysql> SELECT TO_BASE64(ProductId) AS Base64Encode FROM Base64Demo;
+------------------+
| Base64Encode     |
+------------------+
| MzIxUHJvZHVjdA== |
| UHJvZHVjdDQ1Ng== |
| NjU0UHJvZHVjdA== |
+------------------+
3 rows in set (0.00 sec)

3. Decode กลับ (Cross-check)

mysql> SELECT FROM_BASE64('MzIxUHJvZHVjdA==') AS DecodeValue;
+-------------+
| DecodeValue |
+-------------+
| 321Product  |
+-------------+
1 row in set (0.00 sec)

กรณีใช้งานจริง

1. เก็บรหัสผ่าน/Token แบบ Obfuscate (ไม่ใช่ Encryption!)

INSERT INTO users (username, pwd_hash) 
VALUES ('john', TO_BASE64(SHA2('secret123', 256)));

⚠️ Base64 **ไม่ใช่การเข้ารหัส** ใครก็ถอดรหัสได้ ใช้สำห Obfuscation หรือ Transport เท่านั้น

2. จัดเก็บ Binary Data ใน TEXT Column

-- เข้า
INSERT INTO files (name, data_b64) VALUES ('img.png', TO_BASE64(LOAD_FILE('/path/img.png')));

-- ออก
SELECT FROM_BASE64(data_b64) INTO DUMPFILE '/tmp/restored.png' FROM files WHERE name = 'img.png';

3. สร้าง Token/Reference ID

SELECT TO_BASE64(CONCAT(UUID(), '-', UNIX_TIMESTAMP())) AS unique_token;

ข้อจำกัดและข้อควรระวัง

  • ขนาดเพิ่ม ~33% (Base64 ใช้ 4 ตัวอักษร แทน 3 Bytes)
  • ไม่รองรับ NULL - TO_BASE64(NULL) คืนค่า NULL
  • Character Set: ผลลัพธ์เป็น ASCII ปลอดภัยสำหรับทุก Charset
  • MySQL Version: ต้อง 5.6.1+ (GA 2013) - เวอร์ชันเก่าต้องใช้ UDF หรือ Application Layer

ฟังก์ชันเข้ารหัสอื่นๆ ใน MySQL

ฟังก์ชันประเภทคำอธิบาย
AES_ENCRYPT()/AES_DECRYPT()Symmetric Encryptionเข้ารหัสจริง (ต้องมี Key)
SHA2(str, 256/512)Hash (One-way)Hash สำหรับ Password
MD5(), SHA1()Hash (Deprecated)ไม่แนะนำสำหรับ Security ใหม่
TO_BASE64()/FROM_BASE64()EncodingTransport-safe representation