写过一篇 发表于 2025-3-18 08:42:06

关于微信小步伐端base64解码问题

由于atob是浏览器端的,对于微信小步伐不支持,导致模仿器【开辟工具】表现正常,但真机异常解析失败问题,微信小步伐原有的api,官方文档中也废弃了
https://i-blog.csdnimg.cn/direct/b7cba54ba0004539bb2cad3d02e8acf4.png
https://i-blog.csdnimg.cn/direct/4359265eb133443489a305c871943dd2.png
办理方案:
调用:
const decodedString = base64_url_decode(res.data);
const jsonData = JSON.parse(decodedString); weAtob  解密处理文件包 :
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var b64re = /^(?:{4})*?(?:{2}(?:==)?|{3}=?)?$/;
exports.weBtoa = function (string) {
string = String(string);
var bitmap, a, b, c, result = "", i = 0, rest = string.length % 3;
for (; i < string.length;) {
    if ((a = string.charCodeAt(i++)) > 255 ||
      (b = string.charCodeAt(i++)) > 255 ||
      (c = string.charCodeAt(i++)) > 255)
      throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");
    bitmap = (a << 16) | (b << 8) | c;
    result += b64.charAt(bitmap >> 18 & 63) + b64.charAt(bitmap >> 12 & 63) +
      b64.charAt(bitmap >> 6 & 63) + b64.charAt(bitmap & 63);
}
return rest ? result.slice(0, rest - 3) + "===".substring(rest) : result;
};
exports.weAtob = function (string) {
string = String(string).replace(/[\t\n\f\r ]+/g, "");
if (!b64re.test(string))
    throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
string += "==".slice(2 - (string.length & 3));
var bitmap, result = "", r1, r2, i = 0;
for (; i < string.length;) {
    bitmap = b64.indexOf(string.charAt(i++)) << 18 | b64.indexOf(string.charAt(i++)) << 12 |
      (r1 = b64.indexOf(string.charAt(i++))) << 6 | (r2 = b64.indexOf(string.charAt(i++)));
    result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255) :
      r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255) :
      String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);
}
return result;
};
function b64DecodeUnicode(str) {
return decodeURIComponent(exports.weAtob(str).replace(/(.)/g, function (p) {
    var code = p.charCodeAt(0).toString(16).toUpperCase();
    if (code.length < 2) {
      code = "0" + code;
    }
    return "%" + code;
}));
}
exports.base64_url_decode = function (str) {
var output = str.replace(/-/g, "+").replace(/_/g, "/");
switch (output.length % 4) {
    case 0:
      break;
    case 2:
      output += "==";
      break;
    case 3:
      output += "=";
      break;
    default:
      throw "Illegal base64url string!";
}
try {
    return b64DecodeUnicode(output);
}
catch (err) {
    return exports.weAtob(output);
}
}
function weappJwtDecode(token, options) {
if (typeof token !== "string") {
    throw ("Invalid token specified");
}
options = options || {};
var pos = options.header === true ? 0 : 1;
try {
    return JSON.parse(base64_url_decode(token.split(".")));
}
catch (e) {
    throw ("Invalid token specified: " + e.message);
}
}
exports.default = weappJwtDecode;

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 关于微信小步伐端base64解码问题