[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


<<:  [DAY 05]环境建置 : 硬体(3)

>>:  1.4 Design System - 做的优先顺序、注意事项

[DAY 06] CheckBoxItem

题型为多选题的题目 可以用gogole form 中的「核取方块」出题 特徵为在预览模式中 选项前为...

PHP Array Mapping

最近工作上常会需要对一个 array 做批次处理,所以整理一下 PHP 做 array mappin...

Day12-React 表单验证篇-使用 Custom hook 进行表单的验证

这次我们使用 Custom hook 进行表单的验证。 首先我们建立一个档案叫 useInputVa...

学习Python纪录Day19 - 开启Document物件

开启Document物件 doc = doc.Document("档名.docx"...

Day 13: Structural patterns - Composite

目的 将程序的组成转换成有上下阶级的结构(或称:树状结构),方便使用者不论从哪个节点、叶子使用,都可...