crypto-js的前端md5加密

現在的一個需求就是要前端這邊做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)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章