计算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


<<:  从 IT 技术面细说 Search Console 的 27 组数字 KPI (5) 流量:新闻与探索

>>:  Day 5:认识CSS+CSS tag

DAY23 MongoDB 免费监控工具

DAY23 MongoDB 免费监控工具 产品或服务上线最重要的当然是稳定度,大一点的团队会设置监控...

[day6] AES-CBC 内文加密机制(Message)

讯息文本使用AES-CBC模式加密传送,接收的结果亦以相同规则加密 必要的参数 如何取得 JSON讯...

Day 18 CSS <Sprite 精灵图>

1. 为什麽需要精灵图 一个网页中会需要很多小的背景作为修饰,若图像过多服务器频繁接收&发送...

仓库进出货管理

电子化的库房管理,有助於进货、退货、取货等流程的简化,但在不同产业,繁简各有不同,通常在汽车、水电瓦...

新新新手阅读 Angular 文件 - Day03

学习内容 这一篇的内容,是纪录阅读官方文件 tutorial: A Hero Editor 的笔记,...