iT邦幫忙

2021 iThome 鐵人賽

DAY 5
1
永豐金融APIs

釋放你的潛能用技能交易吧!系列 第 5

[Day05] 第五章- 初探金流API文件-4(IV,加密msg透過nodejs實作)

前言

我朋友認為可以文章可以再補齊一點教學
還有postman的使用方法/images/emoticon/emoticon33.gif

目標

今天目標是

  1. postman教學
  2. IV的製作方法
  3. message的加密方法使用aes-256-cbc

實作

1. postman教學

Postman 官方連結

postman現在使用好像會強制註冊
這邊教學會把使用到的功能說明一下
它有團隊的設定及環境設定如果進階用法以後有用到也會補上喔!! :)


postman使用的

第一步驟

點開上方輸入您的主機位置跟port號以及api的path
像我這邊是
localhost:8888/messeage

第二步驟

通常post會帶資料
可以在這邊輸入text或是選擇raw->json格式傳送
或者是有token帶入後端可以從header帶入

第三步驟

接者就可以按傳送摟

第四步驟

可以觀察你的api response 以及status(通常成功會設定200)
通常postman顯示的reponse可以選擇pretty版本(html排版)
或是raw data可以調整
可依照喜歡的排版方式選擇喔

IV製作方法

今天第一個步驟會用到前面的sha256套件
把nonce 透過sha256再取最後16個字元
取字元的方法可以使用substring

const IV = sha256(nonce).substr(-16,16).toLocaleUpperCase() 

code比較簡單來直接驗證一下看看吧!

IV製作完成就可以做加密message吧!!

加密message

永豐的作法會把message json當作文本
加上hashid當作key
演算法使用aes-256-cbc(簡單說明透過此演算法可以保證文本唯一性,並透過IV值控制隨機性增加安全性!!)
IV當作初始畫向量(Initialization vector)

詳細的說明字麻煩各位爬文拉XD
這邊簡單說明一下

好啦 廢話說完開始摟

今天要加密的原始message就是這個

{"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"}

提供永豐加密的nonce
雖然nonce應該是每次交易要get api的一次性value
但這邊為了驗算使用固定的const value
正式開發會轉成fetch api 在做加密喔!!

NjM2NjY5MDQ3OTQwMzIuMTphZmJjODBhOTM5NzQ1NjMyNDFhZTczMjVjYzg0Mjg5ZjQxYTk2MWI2ZjNkYTA0NDdmOTRhZjU3ZTIzOWJlNDgz

這邊是永豐提供的四組hash
已經變成hashid的樣子

4DA70F5E2D800D50B43ED3B537480C64

nodejs 請先把module載入

const {
  scrypt,
  randomFill,
  createCipheriv
} = require('crypto');

完整的messeage code

app.post('/messeage', async function (req, res, next) {
  const IV = sha256(nonce).substr(-16,16).toLocaleUpperCase() 
  const cipher = createCipheriv('aes-256-cbc',hashid, IV);
  let encrypted = cipher.update(msg, 'utf8', 'hex');
  encrypted += cipher.final('hex');
  const result = encrypted.toLocaleUpperCase()
  console.log(encrypted);
  
  res.send(result)
})

透過前面的IV值方法
接者我們選擇nodejs提供的原生套件來做加密吧
詳細說明可以參考

這邊只要設定aes-256-cbc演算法
把前面hashid跟初始向量IV帶入

接者別忘了選擇utf8 hex十六進位模式輸出喔!

後續

到今天為止
把所有參數都做完了並包裝成api的形式
雖然很多值都是為了驗證以固定形式出現
但是為了記錄及驗證算法無誤先這樣的方式出現
以後開發服務會以動態方式
fetch nonce來做真正的串接喔!!

好啦 希望明天就可以開始探討我們服務的架設拉!!

如果有可以討論的環節也可以留言喔!
或是希望我補充的~~
如果我在未來寫code有可以改善或是增加的功能也可以提看看
如果我有餘力會把它完成的!!

/images/emoticon/emoticon01.gif


上一篇
[Day04] 第四章- 初探金流API文件-3 (sign透過nodejs實作)
下一篇
[Day06] 第六章- 開發環境安裝(xampp,vscode,composer)
系列文
釋放你的潛能用技能交易吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言