2

我在 KickAssTorrents.com 上浏览种子,当我访问一个链接时,它以不同的方式在 url 中编码;

例如(IMDb 链接): http: //kat.ph/account/confirm/url/aHR0cDovL3d3dy5pbWRiLmNvbS90aXRsZS90dDA0MDE3Mjk=/

现在,当我更改一个字符时,链接中的某些内容发生了变化,我想知道如何在 C# 或 jQuery 中执行此操作?!

4

4 回答 4

7

在 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="));

System.Text.UTF8Encoding.UTF8.GetBytes(...)如果字符串toEncode包含 ASCII 以外的字符,则使用。请注意,在这种情况下,解码 URL 的任何一方都必须能够正确处理这些字符。

还请查看 David Hardin 提到的案例,看看提到任何问题是否适用于您。或者只是使用大卫的答案=+/

jQuery: google 'jquery base64 encode' (网站 plugins.jquery.com 目前似乎离线,所以我无法确定)

于 2012-05-27T10:48:16.570 回答
4

最好使用以下来自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 字符。

于 2014-12-10T09:41:17.020 回答
2

JavaScript-

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

var decodedStr = window.atob( encodedStr );  //"StringToEncode"
于 2012-05-27T10:54:56.183 回答
0

我不认为 Eugene Ryabtsev 接受的答案是正确的。如果你用 "\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;
}
于 2013-07-29T16:49:48.217 回答