两个版本 一个JS 一个E的还有个C的就不放了也没啥用
这个难点就在最后sha1加密时 如何构建的加密字符串
废话不多说需要自取
js代码需要自行导入crypto库
function Hash_sha1(word) {
return CryptoJS.SHA1(word).toString(CryptoJS.enc.Hex);
}
function Hash_md5(word) {
return CryptoJS.MD5(word).toString(CryptoJS.enc.Hex);
}
function get_random(len) {
let r = Math.random().toString(36).substring(2);
if (r.length < len) {
r += get_random(len - r.length)
}
return r;
}
function get_did() {
return Hash_md5(get_random(16));
}
function Build_NiceSignText(input) {
let output = []
let ptr = input;
let output_index = 4;
while (input.length >> 1 > output_index - 4) {
const c1 = ptr.charCodeAt(0);
const c2 = ptr.charCodeAt(1);
const byte = ((c1 & 0xF0) | (c2 & 0xF));
output[output_index++] = byte;
ptr = ptr.slice(2);
}
return output.map(value => {
return String.fromCharCode(value)
}).join('')
}
function nice_sign_v3(JsonData, did, random) {
let result = {
data: "",
random: random || get_random(),
did: did || get_did()
}
let md5 = [];
md5.push(Hash_md5(result.did.substring(16, 32) + result.did.substring(0, 16)));
md5.push(Hash_md5(result.random + md5[0] + "8a5f746c1c9c99c0b458e1ed510845e5"));
md5[1] = md5[1].substring(16, 32) + md5[1].substring(0, 16)
let obj = JsonData === "" ? {} : typeof JsonData === "string" ? JSON.parse(JsonData) : JsonData
let SignText = Build_NiceSignText(Object.keys(obj).sort().map(value => {
return value + "=" + obj[value];
}).join('&'))
console.log(SignText + md5[1])
let Sign = Hash_sha1(SignText + md5[1])
console.log(Sign.substring(24, 41) ,Sign.substring(8, 24))
result.data = `nice-sign-v1://${Sign.substring(24, 41) + Sign.substring(8, 24)}:${result.random}/${JSON.stringify(obj)}`
return JSON.stringify(result)
}
console.log(nice_sign_v3('{"country":"1","mobile":"888888888","send":"yes","check":"no"}', "",''))
nice.e
(45.76 KB, 下载次数: 84)
|