今天來教大家如何進行AES加解密
先來看一下綠界文件對AES的相關描述
AES 加密的強度設定方式是 128 bit
CipherMode : CBC
PaddingMode :PKCS7
各位在進行AES加解密的時候必須依照上述規定進行
那我們開始吧!
今天就拿綠界文件上的範例來看吧
首先綠界文件提供的data範例
{"Name":"Test","ID":"A123456789"}
我們要先對data進行URLEncode
文件提供了英文大寫與小寫的範例
雖然最後結果不一樣
但只要綠界系統解的開就可以
所以其實只要選一種方式來進行就可以囉
這裡就拿英文大寫來當範例
%7B%22Name%22%3A%22Test%22%2C%22ID%22%3A%22A123456789%22%7D
uvI4yrErM37XNQkXGAgRgJAgHn2t72jahaMZzYhWL1HmvH4WV18VJDP2i9pTbC+tby5nxVExLLFyAkbjbS2Dvg==
實際程式該怎麼寫呢
這裡提供PHP版的AES加密程式碼:
<?php
function aesEncrypt($data, $key, $iv) {
// 對 data 進行 URLEncode
$encodedData = urlencode($data);
// 使用 AES-128-CBC 模式進行加密,並設定填充方式為 PKCS7
$encryptedData = openssl_encrypt(
$encodedData,
'AES-128-CBC',
$key,
OPENSSL_RAW_DATA, // 需要使用原始的二進制資料
$iv
);
// 最後將加密結果進行 base64 編碼
return base64_encode($encryptedData);
}
// Data to be encrypted
$data = '{"Name":"Test","ID":"A123456789"}';
// 綠界提供的 HashKey 和 HashIV
$key = 'ejCk326UnaZWKisg'; // HashKey (必須是 16 字節)
$iv = 'q9jcZX8Ib9LM8wYk'; // HashIV (必須是 16 字節)
// 加密資料
$encryptedResult = aesEncrypt($data, $key, $iv);
echo "加密結果: " . $encryptedResult;
?>
實際運行後
就可以得到一模一樣的加密結果囉
加密結果: uvI4yrErM37XNQkXGAgRgJAgHn2t72jahaMZzYhWL1HmvH4WV18VJDP2i9pTbC+tby5nxVExLLFyAkbjbS2Dvg==
接下來就帶大家來看怎麼解密吧
要如何將先前加密的結果轉換為原始的data呢?
{"Name":"Test","ID":"A123456789"}
第一步就是先按照綠界文件的AES規範進行解密
可以得到
%7B%22Name%22%3A%22Test%22%2C%22ID%22%3A%22A123456789%22%7D
最後再將解密後的data進行URLDecode就可以囉
{"Name":"Test","ID":"A123456789"}
那實際程式碼該怎麼寫呢
這裡一樣提供PHP版的AES解密程式碼:
<?php
function aesDecrypt($encryptedData, $key, $iv) {
// 先將 Base64 字串轉換回二進位數據
$binaryData = base64_decode($encryptedData);
// 使用 OpenSSL 進行 AES CBC 128 解密,並且使用 PKCS7 填充
$decryptedData = openssl_decrypt($binaryData, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
// 對解密後的數據進行 URL 解碼
return urldecode($decryptedData);
}
// 加密過程的參數
$hashKey = 'ejCk326UnaZWKisg';
$hashIV = 'q9jcZX8Ib9LM8wYk';
$encryptedData = 'uvI4yrErM37XNQkXGAgRgJAgHn2t72jahaMZzYhWL1HmvH4WV18VJDP2i9pTbC+tby5nxVExLLFyAkbjbS2Dvg=='; // 這是你的加密數據
// 執行解密
$decrypted = aesDecrypt($encryptedData, $hashKey, $hashIV);
echo "解密結果: " . $decrypted;
實際執行的結果
解密結果: {"Name":"Test","ID":"A123456789"}
以上就是綠界電子發票的加解密流程
有興趣的人可以自己寫看看
或是直接使用上面的程式碼跑看看哦
有問題都可以下方留言
我們明天見