gpt4 book ai didi

c# - Base 64 解码失败,长度无效

转载 作者:行者123 更新时间:2023-12-02 17:22:45 27 4
gpt4 key购买 nike

我尝试使用 C# 代码转换从 javascript 代码生成的 Base64 字符串,但遇到长度无效的消息。

字符串是MQA5ADIAMwA3ADgANwA6ADAA0

它应该转换回 1923787:0

我尝试了一些在线解码器,其中一些可以工作,但有一些因相同的无效长度错误而失败。我不会在这里发布链接,但不用说他们能够将其转换回预期的字符串。

C# 解码

var t = "MQA5ADIAMwA3ADgANwA6ADAA0";
var x = Convert.FromBase64String(t);

Javascript 编码器:

var encoder = function (mL) {
if (!mL || mL === '') {
return '';
}
var ei = [];
var V;
for (V = 0; V < mL.length; V++) {
ei.push(mL.charCodeAt(V) % 256);
ei.push(Math.floor(mL.charCodeAt(V) / 256));
}
ei.push(0);
ei.push(0);
var sf = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
var gF = [],
hO;
for (V = 0; V < ei.length - 1; V += 3) {
hO = ei[V] * 0x10000 + ei[V + 1] * 0x100 + ei[V + 2];
gF.push(sf.charAt(Math.floor(hO / 0x40000)));
gF.push(sf.charAt(Math.floor(hO / 0x1000) % 0x40));
gF.push(sf.charAt(Math.floor(hO / 0x40) % 0x40));
gF.push(sf.charAt(hO % 0x40));
}
var vr = Math.ceil(mL.length * 16 / 6);
while (gF.length > vr) {
gF.pop();
}
if ((gF.length % 4) === 3) {
gF.push('1');
} else if ((gF.length % 4) === 2) {
gF.push('2');
} else if ((gF.length % 4) === 0) {
gF.push('0');
}
return gF.join('');
};

最佳答案

首先,更改您的 for编码为

for (V = 0; V < ei.length - 3; V += 3) {

然后代替

var vr = Math.ceil(mL.length * 16 / 6);
while (gF.length > vr) {
gF.pop();
}
if ((gF.length % 4) === 3) {
gF.push('1');
} else if ((gF.length % 4) === 2) {
gF.push('2');
} else if ((gF.length % 4) === 0) {
gF.push('0');
}

switch (ei.length % 3) {
case 0:
break;
case 1:
gF[gF.length - 2] = '=';
case 2:
gF[gF.length - 1] = '=';
break;
}

现在你会得到

encoder("1923787:0"); // "MQA5ADIAMwA3ADgANwA6ADA="

这是有效的Base64

发生什么事了? Base64 使用 =指定我们开始的字节数,以距离下一个 3 倍数的长度为单位。 ,因此这会将最终字符(由于没有任何位而成为零符号)与 = 交换。迹象。

对循环的修改是在正确的位置结束循环 - 仅使用 - 1 就超出了范围。因为假设你在V >= ei.length - 3但是V < ei.length - 1 ,即V = ei.length - 3V = ei.length - 2您将在 V = ei.length 输入下一个迭代或V = ei.length + 1 ,此时ei[V], ei[V+1], ei[V+2]将是未定义

关于c# - Base 64 解码失败,长度无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23771884/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com