SORU
4 AĞUSTOS 2009, Salı


Kod çözme/değiştirilmiş bir URL, base64 kodlama için

Base64 kodlamak verileri için bir URL koymak ve benim HttpHandler içinde deşifre etmek istiyorum.

Base64 Encoding ' / ' UriTemplate benim eşleşen karmaşa olacak olan karakter. sağlayan buldum "Vikipedi: URL için Base64 değiştirilmiş bir kavram olduğunu buldum sonra

Bir değişiklik Base64 URL varyantı var, hiçbir doldurma '=' kullanılacak, ' A ' ve '/' karakteri standart Base64 olup sırasıyla yerine '-' ve '_', böylece kullanarak URL kodlayıcı/kod çözücüleri artık gerekli ve hiçbir etkisi uzunluğu kodlanmış değeri, bırakarak aynı kodlanmış form sağlam için kullanılan ilişkisel veritabanları, web formları ve nesne tanımlayıcıları genel olarak.

Kullanarak .Temel base64 kodlama yaparak ve kullanarak çözme geçerli Şifremi değiştirmek istiyorum NET "URL için modifiye base64" yöntemi. Herkes bu yapılır mı?

Şifresini çözmek için bir şey ile başlar biliyorum

string base64EncodedText = base64UrlEncodedText.Replace('-', ' ').Replace('_', '/');

// Append '=' char(s) if necessary - how best to do this?

// My normal base64 decoding now uses encodedText

Ama, potansiyel olarak bir veya iki eklemek istiyorum '=' sonuna karakter biraz daha karmaşık görünüyor.

Kodlama mantığım biraz daha basit olmalı:

// Perform normal base64 encoding
byte[] encodedBytes = Encoding.UTF8.GetBytes(unencodedText);
string base64EncodedText = Convert.ToBase64String(encodedBytes);

// Apply URL variant
string base64UrlEncodedText = base64EncodedText.Replace("=", String.Empty).Replace(' ', '-').Replace('/', '_');

Guid to Base64 for URL StackOverflow giriş gördüm, ama bu bilinen bir uzunluğu vardır ve bu nedenle, eşittir işareti sonunda gerekli sayıda koda.

CEVAP
24 Kasım 2009, Salı


Ayrıca kontrol sınıfıHttpServerUtilityişleyen UrlTokenEncode ve UrlTokenDecode yöntemleri ile güvenli Base64 kodlama ve kod çözme URL.

NOT: 1 sonuç, geçerli bir Base64 dize değil. URL için bazı güvenli olmayan bir karakter değiştirilir.

NOT 2: sonuç RFC4648 içinde base64url algoritması farklıdır.

///<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);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dougownsall

    dougownsall

    7 EKİM 2007
  • HER0R

    HER0R

    16 Aralık 2007
  • Michael Lummio

    Michael Lumm

    25 Mayıs 2007