首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 加密函數實戰:ENCODE/DECODE、AES_ENCRYPT 保護敏感資料

     編輯:MySQL 資料庫相關知識

MySQL 內建加密函數:雙向加密與高強度 AES 加密完整指南

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 整合範例

<?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(需應用端運算),資料庫僅存雜湊值

金鑰管理關鍵原則

  • 金鑰**不可硬編碼**在程式碼中
  • 使用環境變數、金鑰管理系統(KMS)、密碼保險箱
  • 定期輪換金鑰,建立資料重新加密流程
  • 備份金鑰與資料分離儲存

結語: 選對加密層級、管好金鑰、密碼用雜湊,才是資料安全的正解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved