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

MySQL 加密函數全攻略:雙向加密與 AES 強化資料庫敏感資料防護

     編輯:MySQL 資料庫相關知識

當 Web 應用程式使用 MySQL 儲存密碼或其他敏感資訊時,如何防止駭客竊取或內部人員窺探,始終是資安防禦的核心課題。MySQL 內建多種加密函數,提供不同強度的保護機制,讓開發者能依據業務需求選擇適當方案。本文將深入解析雙向加密的 ENCODE/DECODE 與更高強度的 AES_ENCRYPT/AES_DECRYPT,並示範實務應用場景。

雙向加密基礎:ENCODE() 與 DECODE()

雙向加密的核心概念是:資料經由一組金鑰加密,僅持有相同金鑰者才能解密還原。MySQL 提供 ENCODE() 與 DECODE() 兩個函數支援此機制。以下範例示範如何為使用者 joe 儲存加密後的密碼 guessme,金鑰設為 abracadabra:

mysql> INSERT INTO users (username, password) 
       VALUES ('joe', ENCODE('guessme', 'abracadabra'));
Query OK, 1 row affected (0.14 sec)

加密結果會以二進位字串形式儲存,直接查詢會顯示不可讀字元:

mysql> SELECT * FROM users WHERE username='joe';
+----------+----------+
| username | password |
+----------+----------+
| joe      | ¡?i??!?  |
+----------+----------+

解密時必須提供相同金鑰:

mysql> SELECT DECODE(password, 'abracadabra') 
       FROM users WHERE username='joe';
+---------------------------------+
| DECODE(password, 'abracadabra') |
+---------------------------------+
| guessme                         |
+---------------------------------+

Web 應用整合範例(PHP)

在驗證使用者登入時,後端程式可直接在 SQL 查詢中解密比對:

<?php
$query = "SELECT COUNT(*) FROM users 
          WHERE username='$inputUser' 
          AND DECODE(password, 'abracadabra') = '$inputPass'";
?>
進階建議: 若需更高強度加密,建議改用 AES_ENCRYPT() 與 AES_DECRYPT(),運作邏輯相同但採用 AES 演算法,抗暴力破解能力大幅提升。

金鑰管理最佳實務

  • 金鑰勿硬編碼於程式碼,應存放於環境變數或設定檔,並限制讀取權限。
  • 定期輪換金鑰,並建立舊資料重新加密機制。
  • 生產環境務必使用 AES 系列函數,ENCODE/DECODE 僅適合低敏感度或測試場景。

善用 MySQL 內建加密函數,能在不引入外部依賴的前提下,大幅降低敏感資料外洩風險,是資料庫層級防護的第一道防線。

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