2009-07-09

MySQL 加解密函數


--[單向加密]
-- MD5 演算法
MD5(str)

-- MySQL 密碼演算法
PASSWORD(str)

-- Unix crypt 演算法
ENCRYPT(str[,salt])

-- 安全散列演算法
SHA1(str)
SHA(str)


--[雙向加密]
-- MySQL 中的低階加解密演算法,
DECODE() -- 解密
ENCODE() -- 加密

-- 以 Advanced Encryption Standard 演算法加解密
AES_DECRYPT(crypt_str,key_str) -- 解密
AES_ENCRYPT(str,key_str)) -- 加密

-- 以 DES 演算法加解密,需要 SSL 的支援
DES_DECRYPT(crypt_str[,key_str]) -- 解密
DES_ENCRYPT(str[,{key_num|key_str}]) -- 加密


--[資料壓縮]
COMPRESS(string_to_compress) -- 壓縮
UNCOMPRESS(string_to_uncompress) -- 解壓縮
UNCOMPRESSED_LENGTH(compressed_string) -- 回傳壓縮前的字串長度


對於 key_str 的設定建議使用 MySQL 變數處理

-- 在 MySQL 中設定金鑰變數
SELECT @key:='sfdgsjhgjgsdfsg'

-- 在查詢資料時可以使用金鑰變數,這樣就可以不用在程式中傳遞金鑰了
-- 在程式撰寫時看起來也比較簡潔
SELECT
`Id`,
AES_DECRYPT(`Name`,@key)AS`Name`,
AES_DECRYPT(`Email`,@key)AS`Email`
FROM `system_uesr`


對於加密過的資料必須存放在二進位( BLOB )的欄位格式中,詳細的型態格式請察看10.5. Data Type Storage Requirements

類型 大小(單位:字節)
 TinyBlob 最大 255
 Blob 最大 65K
 MediumBlob 最大 16M
 LongBlob 最大 4G



參考來源:
MySQL 5.1 Reference Manual :: 11.11.2 Encryption and Compression Functions

0 回應: