最近正在學習串金流,但看了對方提供的API文件,只有PHP的範例,不是很明白,所以來提問
我會有一組 hashKey 和 HashIv 和一整串的String;
HashKey : 12345678901234567890123456789012
HashIv :1234567890123456
String : MerchantID = 3430112 RespondType = JSON TimeStamp = 1485232229 Version = 1.4 MerchantOrderNo = S_1485232229 Amt = 40 ItemDesc = UnitTest;
我目前是這樣做,但結果完全不對,再麻煩各位高手幫幫忙,看看我這初學者 是不是哪裡誤解了,謝謝
public static String encrypt(String hashKey, String hashIv, String text) {
try {
SecretKeySpec skeySpec = new SecretKeySpec(hashKey.getBytes("UTF-8"), "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(hashIv.getBytes("UTF-8"));
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivParameterSpec);
byte[] original = cipher.doFinal(text.getBytes("UTF-8"));
return Base64.encodeBase64URLSafeString(original).toLowerCase();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return null;
}
相关代码
function create_mpg_aes_encrypt ($parameter = "" , $key = "", $iv = "") {
$return_str = '';
if (!empty($parameter)) {
//將參數經過 URL ENCODED QUERY STRING
$return_str = http_build_query($parameter);
}
return trim(bin2hex(openssl_encrypt(addpadding($return_str), 'aes-256-
cbc', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv)));
}
function addpadding($string, $blocksize = 32) {
$len = strlen($string);
$pad = $blocksize - ($len % $blocksize);
$string .= str_repeat(chr($pad), $pad);
return $string;
}
$trade_info_arr = array(
'MerchantID' => 3430112,
'RespondType' => 'JSON',
'TimeStamp' => 1485232229,
'Version' => 1.4,
'MerchantOrderNo' => 'S_1485232229',
'Amt' => 40,
'ItemDesc' => 'UnitTest'
);
$mer_key = '12345678901234567890123456789012';
$mer_iv = '1234567890123456';
//交易資料經 AES 加密後取得 TradeInfo
$TradeInfo = create_mpg_aes_encrypt($trade_info_arr, $mer_key, $mer_iv)
結果為
ff91c8aa01379e4de621a44e5f11f72e4d25bdb1a18242db6cef9ef07d80b0165e476fd1d
9acaa53170272c82d122961e1a0700a7427cfa1cf90db7f6d6593bbc93102a4d4b9b66d9
974c13c31a7ab4bba1d4e0790f0cbbbd7ad64c6d3c8012a601ceaa808bff70f94a8efa5a4f
984b9d41304ffd879612177c622f75f4214fa