base64로 데이터를 인코딩하여 URL에 넣은 다음 내 HttpHandler 내에서 디코딩하고 싶습니다.
Base64 인코딩이 내 UriTemplate 일치를 엉망으로 만드는 '/'문자를 허용 한다는 것을 발견했습니다 . 그런 다음 wikipedia에서 "URL에 대한 수정 된 Base64"개념이 있음을 발견했습니다.
URL 변형에 대해 수정 된 Base64가 존재합니다. 여기서 패딩 '='가 사용되지 않고 표준 Base64의 '+'및 '/'문자가 각각 '-'및 '_'로 대체되어 URL 인코더 / 디코더를 사용합니다. 은 더 이상 필요하지 않으며 인코딩 된 값의 길이에 영향을주지 않으므로 일반적으로 관계형 데이터베이스, 웹 양식 및 개체 식별자에서 사용하기 위해 동일한 인코딩 된 양식을 그대로 둡니다.
.NET을 사용하여 기본 base64 인코딩 및 디코딩을 수행하는 것에서 "수정 된 base64 for URL"방법을 사용하는 것으로 현재 코드를 수정하고 싶습니다. 누구든지 이것을 했습니까?
디코딩하려면 다음과 같이 시작합니다.
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
그러나 조금 더 복잡해 보이는 끝에 '='문자를 하나 또는 두 개 추가해야합니다.
내 인코딩 로직은 좀 더 간단해야합니다.
// 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('/', '_');
나는 보았다 URL에 대한 Base64로에 가이 드 StackOverflow의 항목을,하지만 알려진 길이를 가지고 있으며, 따라서 그들이 마지막에 필요한 등호의 수를 하드 코딩 할 수 있습니다.