2

KickAssTorrents.com で torrent を閲覧していましたが、リンクにアクセスすると、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's answerを使用してください。+/

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 に答える