Web 應用常需儲存密碼、金鑰等敏感資料。MySQL 提供多層加密函數,依安全需求選擇。
ENCODE() / DECODE()同一金鑰加解密,適合一般敏感資料保護。
-- 儲存:以 'abracadabra' 加密 'guessme'
INSERT INTO users (username, password) VALUES ('joe', ENCODE('guessme', 'abracadabra'));
-- 讀取:解密比對
SELECT DECODE(password, 'abracadabra') FROM users WHERE username='joe';
-- 結果:guessme
加密結果為二進位字串,資料庫中顯示為亂碼。
<?php
$query = "SELECT COUNT(*) FROM users
WHERE username='$inputUser'
AND DECODE(password, 'abracadabra') = '$inputPass'";
?>
AES_ENCRYPT() / AES_DECRYPT()採用 AES 演算法,安全性遠高於 ENCODE/DECODE,用法相同:
INSERT INTO users (username, password)
VALUES ('joe', AES_ENCRYPT('guessme', 'strong_key_123'));
SELECT AES_DECRYPT(password, 'strong_key_123') FROM users WHERE username='joe';
**密碼不應可解密**,應使用單向雜湊:
PASSWORD() — MySQL 內部認證用,不建議應用層使用MD5()、SHA1()、SHA2() — 應用層常用bcrypt、scrypt、Argon2(需應用端運算),資料庫僅存雜湊值結語: 選對加密層級、管好金鑰、密碼用雜湊,才是資料安全的正解。