javascript加密
利用套件把字串進行加密,在一些資安要求下可能會有需要。在資料傳送前進行加密,在後端程式接收後在解密還原。
當初需要用到這個功能是在資安要求下不能使用明碼傳送帳號密碼,於是找到這款套件在傳送前進行加密處理。
使用套件crypto-js的文件與下載點
https://code.google.com/archive/p/crypto-js/
似乎是原始git的連結
https://github.com/brix/crypto-js
下面的範例使用的是aes加密
首先載入需要的js
<script src="assets/js/CryptoJS/components/core.js"></script>
<script src="assets/js/CryptoJS/rollups/aes.js"></script>
<script src="assets/js/CryptoJS/components/pad-zeropadding.js"></script>
接著是加密字串的方法,AES_key和AES_iv需換成自訂的16字元的英文或數字字串,並且在後端程式那邊有同樣一組才能解密,可能的情況最好隨機產生不同的字串發給不同使用者。
EX:2358abc087688978
var data = '想加密的字串';
var key = CryptoJS.enc.Latin1.parse('AES_key');
var iv = CryptoJS.enc.Latin1.parse('AES_iv');
var encrypted = CryptoJS.AES.encrypt(data,key,{iv:iv});
encrypted=encodeURIComponent(encrypted);
//encrypted就是加密後的結果
傳到後端程式後使用對應的解密方法即可
以下是PHP範例
//ase解密用
class Aes_fun
{
public function __construct()
{
}
//php7或以上版本
//var encrypted = CryptoJS.AES.encrypt(data,key,{iv:iv});
public static function encrypt($key, $iv, $data)
{
return openssl_encrypt($data,'aes-128-cbc',$key,false,$iv);
}
public static function decrypt($key, $iv, $data)
{
$decode = base64_decode($data);
return openssl_decrypt($decode,'AES-128-CBC',$key,OPENSSL_RAW_DATA,$iv);
}
//php5處理方法
//舊版php
//javascript需要調整加密函數
//var encrypted = CryptoJS.AES.encrypt(data,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});
public static function encrypt_php5($key, $iv, $data)
{
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, "", MCRYPT_MODE_CBC, "");
mcrypt_generic_init($td, $key, $iv);
$encrypted = mcrypt_generic($td, $data);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return base64_encode($encrypted);
}
public static function decrypt_php5($key, $iv, $data)
{
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128,"",MCRYPT_MODE_CBC,"");
mcrypt_generic_init($td, $key, $iv);
$decode = base64_decode($data);
$dencrypted = mdecrypt_generic($td, $decode);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $dencrypted;
}
}
//呼叫對應的函數解密
$asefun = new Aes_fun();
$asefun->decrypt(AES_key,AES_iv,urldecode(trim($_POST['data'])));