2014-11-04 13 views
6

Szukam standardowej implementacji dla base64url zgodnie z RFC4648 w języku C#.C#: base64url zgodnie z RFC4648

znalazłem HttpServerUtility.UrlTokenEncode ale wygląda na to nie wynika RFC4648 (UrlTokenEncode dodaje numer na końcu, który wskazuje liczbę = znaki, które zostały usunięte, patrz here i here).

przykład:

kodowania base64:

Convert.ToBase64String (System.Text.Encoding.ASCII.GetBytes ("AA")); // powraca "Que =" Kodowanie

base64url:

HttpServerUtility.UrlTokenEncode (System.Text.Encoding.ASCII.GetBytes ("AA")); // zwraca „QUE1” ale ja spodziewałbym „Que”

+0

Zamiast mówić "wygląda na to", możesz podać przykład tego, co robi, a czego się spodziewać? –

+0

@ JonSkeet: Przepraszam. dodałem moje obawy ... – Dunken

+0

To wciąż dość ogólnikowe .Proszę podać * konkretny * przykład: przykładowy kod zawierający przykładowe dane, z faktycznym wyjściem i oczekiwanym wyjściem. Przeczytaj http://tinyurl.com/stack-hints –

Odpowiedz

7

oparciu o komentarze, to brzmi jak HttpServerUtility.UrlTokenEncode robi słusznie wyjątkiem za dodatkową postać do wypełnienia. Więc powinieneś być w stanie to zrobić:

string customBase64 = HttpServerUtility.UrlTokenEncode(data); 
string rfc4648 = customBase64.Substring(0, customBase64.Length - 1); 

Jednak należy dodać testy jednostkowe, aby sprawdzić, czy to naprawdę nie używać RFC 4648 alfabetu (w taki sam sposób jak RFC 4648). To dość zaskakujące, że dokumenty są tak rzadkie :(

+2

Jeśli chcesz o decode ('UrlTokenDecode') Jon' rfc4648' musisz jeszcze raz dodać dodatkowy znak: 'if (rfc4648.Length% 4! = 0) rfc4648 + = (4 - rfc4648.Length% 4);' – Dunken

+1

@Dunken: Uważam, że powinieneś dodać go niezależnie od długości - ale z 0 zamiast 4, jeśli w przeciwnym razie byłby 4. –

+0

Masz rację! (jak zawsze ;-)) – Dunken

Powiązane problemy