var base64ReverseLookup = new Uint8Array(123);
for (var i = 25; i >= 0; --i) {
base64ReverseLookup[48+i] = 52+i;
base64ReverseLookup[65+i] = i;
base64ReverseLookup[97+i] = 26+i;
}
base64ReverseLookup[43] = 62;
base64ReverseLookup[47] = 63;
function base64DecodeToExistingUint8Array(uint8Array, offset, b64) {
var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '=');
for (; i < bLength; i += 4) {
b1 = base64ReverseLookup[b64.charCodeAt(i+1)];
b2 = base64ReverseLookup[b64.charCodeAt(i+2)];
uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4;
if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2;
if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)];
}
}
const base64Data1 = "anJnLyE3JVszPUYsfDJ1QW12NVxZKVh+XVNfd0QnKkUiR09laHo+bEBXOHFgNGNDVjtmUTYmMF5SK3RvQiMoZHAxSyRiSE46PFBMblVUeVppIH0/a2EuOUlKLXtNeHMAHFUbAi9NCltGIhoIGS8tSQgaCjgiXBotGRkIXDxKFBopCDwcCDAZUi0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAbmFuAGluZgBOQU4ASU5GAC4AKG51bGwpAFNVRkZBSCBXRUJERVZTISEhISEhISEKAAAAAAAAAAAAAAAZAAsAGRkZAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABkACgoZGRkDCgcAAQAJCxgAAAkGCwAACwAGGQAAABkZGQAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAZAAsNGRkZAA0AAAIACQ4AAAAJAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAEwAAAAATAAAAAAkMAAAAAAAMAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAEDwAAAAAJEAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAARAAAAABEAAAAACRIAAAAAABIAABIAABoAAAAaGhoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAABoaGgAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAABcAAAAAFwAAAAAJFAAAAAAAFAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAVAAAAABUAAAAACRYAAAAAABYAABYAADAxMjM0NTY3ODlBQkNERUY=";
const base64Data2 = "BQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAABoAwEAAAQAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAP////8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAIBADAKAQA=";
const bufferSize = 70000;
const buffer = new Uint8Array(bufferSize);
base64DecodeToExistingUint8Array(buffer, 65536, base64Data1);
base64DecodeToExistingUint8Array(buffer, 66240, base64Data2);
function bytesToString(bytes, start, length) {
let result = '';
for (let i = 0; i < length; i++) {
const byte = bytes[start + i];
if (byte >= 32 && byte <= 126) {
result += String.fromCharCode(byte);
} else if (byte === 0) {
result += '\\0';
} else {
result += `\\x${byte.toString(16).padStart(2, '0')}`;
}
}
return result;
}
console.log("=== 第一段数据完整解码结果(65536-66240)===");
console.log(bytesToString(buffer, 65536, 704));
console.log("\n=== 第二段数据完整解码结果(66240-66500)===");
console.log(bytesToString(buffer, 66240, 260));
console.log("\n=== 内存区域十六进制完整转储 ===");
for (let i = 65536; i < 66500; i += 16) {
let line = `0x${i.toString(16).padStart(8, '0')}: `;
let ascii = '';
for (let j = 0; j < 16; j++) {
if (i + j < bufferSize) {
const byte = buffer[i + j];
line += byte.toString(16).padStart(2, '0') + ' ';
ascii += (byte >= 32 && byte <= 126) ? String.fromCharCode(byte) : '.';
} else {
line += ' ';
ascii += ' ';
}
}
console.log(`${line} |${ascii}|`);
}
function findString(buffer, str) {
const bytes = new TextEncoder().encode(str);
for (let i = 65536; i < 66500; i++) {
let found = true;
for (let j = 0; j < bytes.length; j++) {
if (buffer[i + j] !== bytes[j]) {
found = false;
break;
}
}
if (found) {
console.log(`找到字符串 "${str}" 在偏移量: 0x${i.toString(16)}`);
return i;
}
}
return -1;
}
console.log("\n=== 特定字符串位置 ===");
findString(buffer, "SUFFAH");
findString(buffer, "0123456789ABCDEF");