jquery 如何使用BASE64对URL进行编码?

ctzwtxfj  于 2023-05-22  发布在  jQuery
关注(0)|答案(5)|浏览(207)

我在www.example.com浏览种子KickAssTorrents.com,当我访问一个链接时,它以不同的方式编码在URL中;
例如(IMDb链接):http://kat.ph/account/confirm/url/aHR0cDovL3d3dy5pbWRiLmNvbS90aXRsZS90dDA0MDE3Mjk=/
现在,当我改变一个字符时,链接中的内容会发生变化,我想知道如何在C#或jQuery中做到这一点?!

3bygqnnd

3bygqnnd1#

在C#中:

static public string EncodeTo64(string toEncode) {
    byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
    string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
    return returnValue;
}
static public string DecodeFrom64(string encodedData) {
    byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
    string returnValue = System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes);
    return returnValue;
}
MessageBox.Show(DecodeFrom64("aHR0cDovL3d3dy5pbWRiLmNvbS90aXRsZS90dDA0MDE3Mjk="));

如果字符串toEncode包含ASCII以外的字符,则使用System.Text.UTF8Encoding.UTF8.GetBytes(...)。请注意,在这种情况下,解码URL的任何一方都必须能够正确处理这些字符。
另外,请查看大卫哈丁提到的=+/中的the case,看看是否有任何提到的问题适用于您。或者使用大卫的answer
jQuery:google 'jquery base64 encode'(网站plugins.jquery.com目前似乎离线,所以我无法确定是否可以检查)

4dbbbstv

4dbbbstv2#

最好使用下面来自https://stackoverflow.com/a/1789179的代码

///<summary>
/// Base 64 Encoding with URL and Filename Safe Alphabet using UTF-8 character set.
///</summary>
///<param name="str">The origianl string</param>
///<returns>The Base64 encoded string</returns>
public static string Base64ForUrlEncode(string str)
{
    byte[] encbuff = Encoding.UTF8.GetBytes(str);
    return HttpServerUtility.UrlTokenEncode(encbuff);
}
///<summary>
/// Decode Base64 encoded string with URL and Filename Safe Alphabet using UTF-8.
///</summary>
///<param name="str">Base64 code</param>
///<returns>The decoded string.</returns>
public static string Base64ForUrlDecode(string str)
{
    byte[] decbuff = HttpServerUtility.UrlTokenDecode(str);
    return Encoding.UTF8.GetString(decbuff);
}

原因是Base64包含无效的URL字符。

3ks5zfa0

3ks5zfa03#

JavaScript-

var encodedStr = window.btoa("StringToEncode");

var decodedStr = window.atob( encodedStr );  //"StringToEncode"
kgsdhlau

kgsdhlau4#

我不认为尤金·里亚布采夫的公认答案是正确的。如果你尝试使用“\xff”,你会看到:

DecodeFrom64(EncodeTo64("\xff")) == "?" (i.e. "\x3f")

原因是ASCIIEncoding并没有超过代码127。128到255之间的所有字符都将无法识别,并将转换为“?“.
因此,扩展编码是必要的,如下:

static public string EncodeTo64(string toEncode) {
    var e = Encoding.GetEncoding("iso-8859-1");
    byte[] toEncodeAsBytes = e.GetBytes(toEncode);
    string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
    return returnValue;
}
static public string DecodeFrom64(string encodedData) {
    var e = Encoding.GetEncoding("iso-8859-1");
    byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
    string returnValue = e.GetString(encodedDataAsBytes);
    return returnValue;
}
7gcisfzg

7gcisfzg5#

对Base64 Url Safe中的字符串进行编码/解码(更多信息:https://en.wikipedia.org/wiki/Base64#URL_applications)最好的方法是使用Base64UrlEncoderMicrosoft.IdentityModel.Tokens命名空间https://learn.microsoft.com/en-us/dotnet/api/microsoft.identitymodel.tokens.base64urlencoder?view=msal-web-dotnet-latest

var enc = Base64UrlEncoder.Encode("https://stackoverflow.com/questions/10773339/how-to-base64-encode-urls");
var dec = Base64UrlEncoder.Decode(enc);

相关问题