😎增加 API数据签名

This commit is contained in:
zuohuaijun 2024-10-18 10:12:11 +08:00
parent 3ea848ea65
commit 18e076befa
3 changed files with 67 additions and 7 deletions

View File

@ -2,7 +2,7 @@
"name": "admin.net.pro",
"type": "module",
"version": "2.4.33",
"lastBuildTime": "2024.10.17",
"lastBuildTime": "2024.10.18",
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
"author": "zuohuaijun",
"license": "MIT",
@ -29,12 +29,13 @@
"axios": "^1.7.7",
"countup.js": "^2.8.0",
"cropperjs": "^1.6.2",
"crypto-js": "^4.2.0",
"echarts": "^5.5.1",
"echarts-gl": "^2.0.9",
"echarts-wordcloud": "^2.1.0",
"element-plus": "^2.8.5",
"exceljs": "^4.4.0",
"ezuikit-js": "^8.0.12",
"ezuikit-js": "^8.0.13-alpha.2",
"gcoord": "^1.0.6",
"js-cookie": "^3.0.5",
"js-table2excel": "^1.1.2",
@ -62,7 +63,7 @@
"vue": "^3.5.12",
"vue-clipboard3": "^2.0.0",
"vue-demi": "0.14.6",
"vue-draggable-plus": "^0.5.3",
"vue-draggable-plus": "^0.5.4",
"vue-grid-layout": "3.0.0-beta1",
"vue-i18n": "^10.0.4",
"vue-json-pretty": "^2.4.0",
@ -70,7 +71,7 @@
"vue-router": "^4.4.5",
"vue-signature-pad": "^3.0.2",
"vue3-tree-org": "^4.2.2",
"vxe-pc-ui": "^4.2.21",
"vxe-pc-ui": "^4.2.23",
"vxe-table": "^4.7.59",
"vxe-table-plugin-element": "^4.0.4",
"vxe-table-plugin-export-xlsx": "^4.0.7",
@ -84,8 +85,8 @@
"@types/node": "^20.16.5",
"@types/nprogress": "^0.2.3",
"@types/sortablejs": "^1.15.8",
"@typescript-eslint/eslint-plugin": "^8.9.0",
"@typescript-eslint/parser": "^8.9.0",
"@typescript-eslint/eslint-plugin": "^8.10.0",
"@typescript-eslint/parser": "^8.10.0",
"@vitejs/plugin-vue": "^5.1.4",
"@vitejs/plugin-vue-jsx": "^4.0.1",
"@vue/compiler-sfc": "^3.5.12",
@ -96,7 +97,7 @@
"less": "^4.2.0",
"prettier": "^3.3.3",
"rollup-plugin-visualizer": "^5.12.0",
"sass": "^1.80.1",
"sass": "^1.80.2",
"terser": "^5.36.0",
"typescript": "^5.6.3",
"vite": "^5.4.9",

View File

@ -12,6 +12,7 @@ declare module 'vcrontab-3';
declare module 'vue-signature-pad';
declare module 'vform3-builds';
declare module 'jwchat';
declare module 'crypto-js'
// 声明一个模块,防止引入文件时报错
declare module '*.json';

View File

@ -0,0 +1,58 @@
import CryptoJS from 'crypto-js';
/**
* KSort
* @param appId APP_ID
* @param appKey APP_KEY
* @param command
* @param data
* @param timestamp
* @returns
*/
export function signatureByKSort(appId: string, appKey: string, command: string, data: any, timestamp: number | null = null) {
// 序列化数据
const input = typeof data === 'string' ? (data as string) : JSON.stringify(data);
// 生成时间戳
if (!timestamp) {
timestamp = new Date().getTime() - new Date('1970-01-01T00:00:00Z').getTime();
}
const sData: any = {
app_id: appId,
app_key: appKey,
command,
data: input,
timestamp,
};
// 获取对象的所有键并对键进行排序
const keys = Object.keys(sData);
keys.sort();
// 生成签名
let result = '';
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
const value = sData[key];
result += key + '=' + value;
if (i < keys.length - 1) {
result += ',';
}
}
// MD5 小写加密
const hash = CryptoJS.MD5(result);
const hexString = hash.toString(CryptoJS.enc.Hex);
var signature = hexString.toLowerCase();
return {
app_id: appId,
app_key: appKey,
command,
data: input,
timestamp,
signature,
};
}