123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // 参考 https://github.com/darknessomi/musicbox/wiki/
- 'use strict'
- const crypto = require('crypto')
- const bigInt = require('big-integer')
- const modulus = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'
- const nonce = '0CoJUm6Qyw8W8jud'
- const pubKey = '010001'
- String.prototype.hexEncode = function() {
- let hex, i
- let result = ""
- for (i = 0; i < this.length; i++) {
- hex = this.charCodeAt(i).toString(16)
- result += ("" + hex).slice(-4)
- }
- return result
- }
- function createSecretKey(size) {
- const keys = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
- let key = ""
- for (let i = 0; i < size; i++) {
- let pos = Math.random() * keys.length
- pos = Math.floor(pos)
- key = key + keys.charAt(pos)
- }
- return key
- }
- function aesEncrypt(text, secKey) {
- const _text = text
- const lv = new Buffer('0102030405060708', "binary")
- const _secKey = new Buffer(secKey, "binary")
- const cipher = crypto.createCipheriv('AES-128-CBC', _secKey, lv)
- let encrypted = cipher.update(_text, 'utf8', 'base64')
- encrypted += cipher.final('base64')
- return encrypted
- }
- function zfill(str, size) {
- while (str.length < size) str = "0" + str
- return str
- }
- function rsaEncrypt(text, pubKey, modulus) {
- const _text = text.split('').reverse().join('')
- const biText = bigInt(new Buffer(_text).toString('hex'), 16),
- biEx = bigInt(pubKey, 16),
- biMod = bigInt(modulus, 16),
- biRet = biText.modPow(biEx, biMod)
- return zfill(biRet.toString(16), 256)
- }
- function Encrypt(obj) {
- const text = JSON.stringify(obj)
- const secKey = createSecretKey(16)
- const encText = aesEncrypt(aesEncrypt(text, nonce), secKey)
- const encSecKey = rsaEncrypt(secKey, pubKey, modulus)
- return {
- params: encText,
- encSecKey: encSecKey
- }
- }
- module.exports = Encrypt
|