iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
永豐金融APIs

串接生活與金融 API系列 第 5

計算API所需: 以 AES CBC 編碼

我實在對於密碼學非常不熟悉,所以找了一下,目前最適合我使用的範例程式碼來自於 …

PythonでAESの暗号化を試した

將對方的程式碼加以修改後,整理如下

 
from base64 import b64encode
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad
import json

## 只有 data / key / iv 進行了替換
data = '{"ShopNo":"NA0001_001","OrderNo":"201807111119291750","Amount":50000,"CurrencyID":"TWD","PayType":"C","ATMParam":{},"CardParam":{"AutoBilling":"N","ExpMinutes":30},"PrdtName":"信用卡訂單","ReturnURL":"http://10.11.22.113:8803/QPay.ApiClient-Sandbox/Store/Return","BackendURL":"https://sandbox.sinopac.com/funBIZ.ApiClient/AutoPush/PushSuccess"}'.encode('utf-8')
key = "4DA70F5E2D800D50B43ED3B537480C64".encode('utf-8')
iv = "346BBE8E3F34FFEA".encode('utf-8') #get_random_bytes(16)

cipher = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)
ct_bytes = cipher.encrypt(pad(data, AES.block_size))
iv = b64encode(iv).decode('utf-8')
ct = b64encode(ct_bytes).decode('utf-8')
result = json.dumps({'iv':iv, 'ciphertext':ct})
print(result) 

# 此處的  ct 就是編碼後的 data

但是出來的結果與範例的不同,因為文件規格中說明 "最後將訊息內文以AES CBC方式加密,加密後的Byte以十六進制2位數字串相加" … 這實在是看不太懂,明天再來試試看

如果真的不行的話,可能要換成玩股票那組 API 了

/images/emoticon/emoticon20.gif


上一篇
計算API所需要的參數: 內文雜湊
下一篇
放棄實作 AES CBC 加密/解密
系列文
串接生活與金融 API6

尚未有邦友留言

立即登入留言