现在的一个需求就是要前端这边做md5加密,本来想要用crypto,而crypto是node内置的模块,在npm查了一下,这个包已经没有了,所以改用crypto-js,这个还是很简单的。

我们这边的md5的加密规则如下:

  1. 将除了sign和appKey以外的,一级请求参数(不包含对象数组等)根据key值按照字母表的顺序(a~z)排序,将其对应参数值(仅value,不要key)拼接到一起,得到字符串A
  2. 拼接 appKey+A+appSecret ,得到字符串B
  3. 将字符串B 进行urlencode(utf-8)编码,结果转化为大写,得到字符串C。除了字符、数字、下划线全部编码
  4. 将字符串C 进行MD5编码,结果转化为大写,得到字符串D

所以可以将这些都写在一个js里面,然后引入就好了

// md5.js
/* eslint-disable */
import CryptoJS from 'crypto-js'
// md5 加密
const md5 = str => CryptoJS.MD5(str).toString().toUpperCase()
export const sign = (params, appKey, appSecret) => {
  const obj = {}
  let str = ''

  for (const k in params) {
    if (['sign', 'appKey'].includes(k) || k instanceof Array || k instanceof Object || params[k] === undefined) {
      continue
    }

    obj[k] = params[k]
  }

  Object.keys(obj).sort().forEach(k => {
    console.log(k, ': ', obj[k]);
    str += obj[k]
  })
  str = encodeURI(`${ appKey }${ str }${ appSecret }`).toUpperCase()
  console.log('str-------------->', str)
  return md5(str);
}

// const params = {"restaurantId":"1106073","lat":31.298,"lng":121.448,"channel":"ele"};
// console.log(sign(params, '9381936516', 'D31ba58fd73C71db697ab5E4946D52F'));

用ES6的import 引入调用


// index.js


import { sign as getSign } from './md5'

const appKey = '888888888'
    const appSecret = 'sdggdsgcdhdshdhfhhfhdhhhfvc'
    const sign = getSign(postDatas, appKey, appSecret)
    console.log('sign', sign)

 

关注一下公众号呀~

 

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐