iT邦幫忙

0

【我可以你也可以的Node.js】第二二篇 - Crypto 加密模組 #以串接 BitoPro API 為例

先來簡單講講,為何需要?

因為是秘密所以不想讓人知道。

而在如何做到這點?

你不要說不就沒事了 (X)

在生活中我們有很多一定要接受的事,
例如:
我沒辦法控制我得體重啊
我隔壁同事交不到女朋友啊!
我隔壁同事交不到女朋友啊!
我隔壁同事交不到女朋友啊!
一定要藉由網路傳遞得一些敏感訊息 ( token密碼 之類的 )
...

那我們從那麼多的生活例子拿最後一個來說,
我隔壁同事交不到女朋友已經不是秘密了 (硬要嘴)

就是當我們藉由網路上,
必須要透過帳號密碼來註冊某網站的會員
又或是藉由登入透過 token ,來授權某些行為時,
那不管是 密碼 還是 token 都可以存取我們一些個人資料,
我相信你不會想要被做壞壞的事吧!
那這時你就需要透過加密來把明文變成密文,
目的就是為了不讓他人能夠輕易的被取得或是猜到。
而加密技術百百種我們這邊就不多做解釋,
我剛好逛到一篇我覺得整理的非常詳細的有興趣可以看一下
[CH18]加密技術(Cryptography)

注意:
這篇是很簡單的使用而已,沒有太多專業的分析研究,請斟酌觀賞感謝~


以串接 BitoPro API 為例

  1. 申請 API Key

  2. 用 Node 串接

結果:

恭喜老爺賀喜夫人成功啦

今天文章到此結束
感謝大家
.
.
.
.
.
.
.
.
上面是受到這張圖的啟發 xDD

其實官方恰恰好有 Node 的範例

那我們為了不跑題這篇主要來關注的是如何透過 crypto 模組來加密獲取 API 所需要的 headers

 headers: {
    'X-BITOPRO-APIKEY': apiKey,
    'X-BITOPRO-PAYLOAD': payload,    // For the authenticated APIs using DELETE method, you don't need the payload field.
    'X-BITOPRO-SIGNATURE': signature
  },
  • apiKey - 就是直接拿官方的使用就可以了
  • payload - 將 body JSON 轉成 base64 就可以囉
    const payload = Buffer.from(JSON.stringify(body)).toString('base64')
    
  • signature - 將 api secret 和 payload 加密成 16進制的 SHA-384 的 Hash
    const signature = const crypto = require('crypto')
    
    crypto
      .createHmac('sha384', apiSecret)
      .update(payload)
      .digest('hex')
    

使用方式看起來是不是很簡單!

接著你就可以把這些塞到 headers ,來使用你的 API 囉
(這邊以拿 User Balance 為例)
完整程式碼參照官方詳細使用您可以自己調整
我只是懶惰

const request = require('request')
const crypto = require('crypto')

const apiKey = '[Your API key here]'
const apiSecret = '[Your API secret here]'
const baseUrl = 'https://api.bitopro.com/v2'

const url = '/accounts/balance'
const nonce = Date.now()
const completeURL = baseUrl + url
// This is the default body for the authenticated APIs using GET method
const body = { identity: '[Your account (email)]', nonce }

const payload = Buffer.from(JSON.stringify(body)).toString('base64')


const signature = crypto
  .createHmac('sha384', apiSecret)
  .update(payload)
  .digest('hex')

const options = {
  url: completeURL,
  headers: {
    'X-BITOPRO-APIKEY': apiKey,
    'X-BITOPRO-PAYLOAD': payload,    // For the authenticated APIs using DELETE method, you don't need the payload field.
    'X-BITOPRO-SIGNATURE': signature
  },
  body: JSON.stringify(body)    // For the authenticated APIs using GET method, you don't need the body field.
}

// GET
return request.get(
  options,
  function(error, response, body) {
    console.log('response:', JSON.stringify(body, 0, 2))
  }
)

以上

真的結束了xDD
感謝您的收看

越來越發現好像快沒東西寫了 xDD
專案的文章又沒辦法短時間內完成,有點尬 QQ


尚未有邦友留言

立即登入留言