Source: sign.js

'use strict';

var crypto = require('crypto');

/**
 * @module open-service-node-sdk/lib/sign
 * @author xuyuanxiang <xuyuanxiang@wosai-inc.com> ({@link http://xuyuanxiang.me})
 * @description 计算签名:sha1(sort(arg1, arg2, arg3...))
 * @example
 * const sign = require('open-service-node-sdk/lib/sign');
 *
 * const token = '123456';
 * const timestamp = new Date().getTime();
 * const nonce = 'abc123';
 * const encrypt = 'ol5ZdzGiGK9yXYIuKB0wb5I4DTnZwkNcuo0b3OZgCUNqMRIdb9mfsmjVEe5vJT+pp7M5kyY8lfxFGnrT/qr0UER9v+skaX5GQ59AEtILoe4=';
 *
 * const signature = sign(timestamp, nonce, token, encrypt); // 参数顺序随意
 * @param {...String} rest - 变长参数
 * @return {String} 签名
 */
module.exports = function sign() {
  for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {
    rest[_key] = arguments[_key];
  }

  if (!Array.isArray(rest) || rest.length === 0) {
    return '';
  }
  // 将参数值按照字母生序排列,拼接为一个字符串。
  var params = rest.map(function (it) {
    return String(it);
  }).sort().join('');

  var sha = crypto.createHash('sha1');
  sha.update(params, 'utf8');
  return sha.digest('hex');
};