2012-05-27 2 views
2

Я просматривал торренты на KickAssTorrents.com, когда я посещаю ссылку, она закодирована в URL-адресе другим способом;Как кодировать BASE64 URL?

, например (ссылка IMDb): http://kat.ph/account/confirm/url/aHR0cDovL3d3dy5pbWRiLmNvbS90aXRsZS90dDA0MDE3Mjk=/

Теперь, когда я изменить персонаж что-то меняет в ссылке, и я хочу знать, как сделать это в C# или JQuery?!

ответ

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-адрес, должна иметь возможность правильно обрабатывать эти символы.

Также обратите внимание на the case из =, + и / упоминает Дэвид Хардин, чтобы увидеть, если какой-либо из упомянутых проблем относятся к вам. Или просто используйте Дэвида answer.

JQuery: Google 'Jquery base64 закодировать' (сайт plugins.jquery.com, кажется, отсутствует в данный момент, так что я не могу проверить это точно)

2

JavaScript-

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

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

I не думайте, что принятый ответ от Евгения Рябцева прав. Если вы попробуете это с «\ 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; 
} 
+0

В сети всего два кодировки: ASCII и UTF-8. Использование чего-либо еще - это безумие или прикладная археология, в зависимости от намерения. Используйте UTF-8 и получите надпись. –

3

Лучше использовать код ниже от 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.

+0

Кажется, что это действительные символы URL. Использование их _does_ mess с распространенными схемами декодирования/интерпретации. +1 –

Смежные вопросы