PHP資料加密的方法有很多,這裡推薦使用AES 對稱式加解密法,這總方法除了數值本身的加密外,還加上了三方key的定義,產生的雜湊值如資料傳輸或存入資料表,三方key可以選一個自己知道的密碼藏在網站裡面用php常數帶出,這樣即使資料表被人破解了拿到裡面的數值沒有三方key的數值也是解不開的,AES資料加密function如下:
//AES 資料加密
function encryptdecode($var="",$types="",$key=""){
//製作SHA384-KEY
$hash_string = $key;
$hash = hash('SHA384', $hash_string, true);
$app_cc_aes_key = substr($hash, 0, 32);
$app_cc_aes_iv = substr($hash, 32, 16);
//加密
if($types==encrypt){
$data = $var;
$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);
$encrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $app_cc_aes_key, $data, MCRYPT_MODE_CBC, $app_cc_aes_iv);
$encrypt_text = base64_encode($encrypt);
$returnvar=$encrypt_text;
}
//解密
if($types==decryption){
$encrypt =base64_decode($var);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $app_cc_aes_key, $encrypt, MCRYPT_MODE_CBC, $app_cc_aes_iv);
$padding = ord($data[strlen($data) - 1]);
$decrypt_text = substr($data, 0, -$padding);
$returnvar=$decrypt_text;
}
return $returnvar;
}
如需加密解密只要呼叫encryptdecode()函數給予值參即可
//資料加密
echo encryptdecode($var="Good day, 201852",$types="encrypt",$key=test123);
輸出加密字串:dO7N6jPnOhfWpBHnefP9w0GHVrnvpkZQGmkXcCnxXFg=
//資料解密
echo encryptdecode($var="dO7N6jPnOhfWpBHnefP9w0GHVrnvpkZQGmkXcCnxXFg=",$types="decryption",$key=test123);
輸出解密字串:Good day, 201852
其中的$key值可以自訂,但加密使用的$key值跟解密必須相同才行,否則是解不開的!!
參考資料來源:
http://www.codedata.com.tw/social-coding/aes/
https://cola.workxplay.net/encrypt-and-decrypt-data-in-php-using-aes-example/
教學撰寫:徐嘉裕 Neil hsu
//AES 資料加密
function encryptdecode($var="",$types="",$key=""){
//製作SHA384-KEY
$hash_string = $key;
$hash = hash('SHA384', $hash_string, true);
$app_cc_aes_key = substr($hash, 0, 32);
$app_cc_aes_iv = substr($hash, 32, 16);
//加密
if($types==encrypt){
$data = $var;
$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);
$encrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $app_cc_aes_key, $data, MCRYPT_MODE_CBC, $app_cc_aes_iv);
$encrypt_text = base64_encode($encrypt);
$returnvar=$encrypt_text;
}
//解密
if($types==decryption){
$encrypt =base64_decode($var);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $app_cc_aes_key, $encrypt, MCRYPT_MODE_CBC, $app_cc_aes_iv);
$padding = ord($data[strlen($data) - 1]);
$decrypt_text = substr($data, 0, -$padding);
$returnvar=$decrypt_text;
}
return $returnvar;
}
如需加密解密只要呼叫encryptdecode()函數給予值參即可
//資料加密
echo encryptdecode($var="Good day, 201852",$types="encrypt",$key=test123);
輸出加密字串:dO7N6jPnOhfWpBHnefP9w0GHVrnvpkZQGmkXcCnxXFg=
//資料解密
echo encryptdecode($var="dO7N6jPnOhfWpBHnefP9w0GHVrnvpkZQGmkXcCnxXFg=",$types="decryption",$key=test123);
輸出解密字串:Good day, 201852
其中的$key值可以自訂,但加密使用的$key值跟解密必須相同才行,否則是解不開的!!
參考資料來源:
http://www.codedata.com.tw/social-coding/aes/
https://cola.workxplay.net/encrypt-and-decrypt-data-in-php-using-aes-example/
教學撰寫:徐嘉裕 Neil hsu
留言
張貼留言