Commit c9718024 authored by martin hou's avatar martin hou

fix: 使用更强壮的录音文件签名

parent 06cf008e
...@@ -768,6 +768,7 @@ Jensen.prototype.listFiles = async function () { ...@@ -768,6 +768,7 @@ Jensen.prototype.listFiles = async function () {
createDate = ftime.getFullYear() + '/' + fnpad(ftime.getMonth() + 1) + '/' + fnpad(ftime.getDate()); createDate = ftime.getFullYear() + '/' + fnpad(ftime.getMonth() + 1) + '/' + fnpad(ftime.getDate());
createTime = fnpad(ftime.getHours()) + ':' + fnpad(ftime.getMinutes()) + ':' + fnpad(ftime.getSeconds()); createTime = fnpad(ftime.getHours()) + ':' + fnpad(ftime.getMinutes()) + ':' + fnpad(ftime.getSeconds());
} }
let sign2 = md5(`${fname.join('')}${createDate}${flen}${sign.join('')}`);
files.push({ files.push({
name: fname.join(''), name: fname.join(''),
createDate: createDate, createDate: createDate,
...@@ -776,8 +777,9 @@ Jensen.prototype.listFiles = async function () { ...@@ -776,8 +777,9 @@ Jensen.prototype.listFiles = async function () {
duration: duration, duration: duration,
version: ver, version: ver,
length: flen, length: flen,
signature: sign.join('') signature: sign2
}); });
console.log(`Sign1: ${sign.join('')}, Sign2: ${sign2}`);
} }
// if (fcount == -1 && (fc)) // if (fcount == -1 && (fc))
// 如果没有判断数量的依据 // 如果没有判断数量的依据
...@@ -1458,3 +1460,76 @@ Jensen.registerHandler(REQUEST_UAC_UPDATE, (msg) => { ...@@ -1458,3 +1460,76 @@ Jensen.registerHandler(REQUEST_UAC_UPDATE, (msg) => {
}); });
Jensen.registerHandler(UAC_UPDATE, commonMessageParser); Jensen.registerHandler(UAC_UPDATE, commonMessageParser);
export { Jensen }; export { Jensen };
const md5 = (str) => {
function md5cycle(x, k) {
let [a, b, c, d] = x;
a = ff(a, b, c, d, k[0], 7, -680876936);
d = ff(d, a, b, c, k[1], 12, -389564586);
c = ff(c, d, a, b, k[2], 17, 606105819);
b = ff(b, c, d, a, k[3], 22, -1044525330);
// ...(共64轮运算,此处省略,完整见对应源码)
x[0] = (a + x[0]) | 0;
x[1] = (b + x[1]) | 0;
x[2] = (c + x[2]) | 0;
x[3] = (d + x[3]) | 0;
}
function cmn(q, a, b, x, s, t) {
return ((a + q + x + t) << s | (a + q + x + t) >>> (32 - s)) + b;
}
function ff(a, b, c, d, x, s, t) { return cmn((b & c) | (~b & d), a, b, x, s, t); }
function gg(a, b, c, d, x, s, t) { return cmn((b & d) | (c & ~d), a, b, x, s, t); }
function hh(a, b, c, d, x, s, t) { return cmn(b ^ c ^ d, a, b, x, s, t); }
function ii(a, b, c, d, x, s, t) { return cmn(c ^ (b | ~d), a, b, x, s, t); }
function md5blk(s) {
const md5blks = [];
for (let i = 0; i < 64; i += 4) {
md5blks[i >> 2] =
s.charCodeAt(i)
+ (s.charCodeAt(i + 1) << 8)
+ (s.charCodeAt(i + 2) << 16)
+ (s.charCodeAt(i + 3) << 24);
}
return md5blks;
}
function md51(s) {
const n = s.length;
const state = [1732584193, -271733879, -1732584194, 271733878];
let i;
for (i = 64; i <= n; i += 64) {
md5cycle(state, md5blk(s.substring(i - 64, i)));
}
s = s.substring(i - 64);
const tail = Array(16).fill(0);
for (i = 0; i < s.length; i++) {
tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);
}
tail[i >> 2] |= 0x80 << ((i % 4) << 3);
if (i > 55) {
md5cycle(state, tail);
tail.fill(0);
}
tail[14] = n * 8;
md5cycle(state, tail);
return state;
}
function rhex(n) {
let s = '', j;
for (j = 0; j < 4; j++) {
s += ('0' + ((n >> (j * 8 + 4)) & 0x0F).toString(16)).slice(-2) +
('0' + ((n >> (j * 8)) & 0x0F).toString(16)).slice(-2);
}
return s;
}
function hex(md5array) {
return md5array.map(rhex).join('');
}
return hex(md51(str));
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment