asp.net 从URL解码Base64字符串c#

w8rqjzmb  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(7075)

我正在尝试解码下面的Base64字符串,我从一个URL中获得如下:

string msgFromUrl = "j3oaCbiwIfZF1QFa%2FHkMaW5lVpnOMBsA5wYI"; 
byte[] data = Convert.FromBase64String(msgFromUrl);
string decoded = Encoding.UTF8.GetString(data);
Console.WriteLine(decoded);

我得到了一个错误的字符串,我需要解码。我得到的错误是:

The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

我意识到字符串中有一个百分比符号,当我试图删除它时,我没有达到Base64 char的有效长度。因为我是从一个url中检索这个字符串的,所以是否有任何隐藏的东西,或者我必须做更多的事情才能解码编码的字符串?
谢谢你。

esyap4oy

esyap4oy1#

事实上,有一种方法可以做到这一点,但要做到这一点,你必须了解url编码,例如,当数据通过url地址以阿拉伯语发送时,你会注意到数据是这样的:
%D9%85%D8%B1%D8%AD%D8%A8%D8%A2%20%D8%A7%D8%B5%D8%AF%D9%82%D8%A7%D8%A6%D9%89
但这通常取决于浏览器。有一些浏览器,如手机的Opera浏览器,不能与url编码系统一起工作。相反,所有值 与其他浏览器(如Google Chrome)不同的是,它们是按原样发送的,没有任何变化,因此您必须首先解码值,因此我们可以提出这个例子:

<script> function fromURL(){ var url = "https://www.code-editor.com?Code=PGh0bWw+CjxoZWFkPg=="; var Base64_text = url.searchParams.get("Code"); console.log(atob(Base64_text. replaceAll(" ","+"))); } </script>

正如你在一些浏览器中看到的,+号被替换为空格,所以我们要做的就是在获取数据之前。我们首先将所有空格替换为+号,这样问题就解决了,如前一个例子所示,您可以通过url发送Base64,没有任何限制

相关问题