2017-04-25 290 views
-1

난 그냥 작동하지 않는이 간단한 코드로, 여기 벽에 내 머리를 때리고 해요 :System.FormatException : 'Base-64 char 배열 또는 문자열의 길이가 잘못되었습니다.'

string middle = "eyJzdWIiOiJtYXR0d2ViZXIiLCJqdGkiOiJlMWVmNjc5Mi02YTBjLTQ4YWUtYmQzNi0wZDlmMTVlMDFiY2UiLCJpYXQiOjE0OTMwOTI0OTQsIm5iZiI6MTQ5MzA5MjQ5NCwiZXhwIjoxNDkzMjY1Mjk0LCJpc3MiOiJFQ29tbVdlYkFQSTIiLCJhdWQiOiJFQ29tbVdlYkNsaWVudDIifQ" 

byte[] newBytes = Convert.FromBase64String(middle); 
middle = Encoding.UTF8.GetString(newBytes); 

그것은 그렇게 간단입니다! 그렇지만 제목에 오류가 있습니다.

또한 나는 https://www.base64decode.org/에서 이것을 실행하고 완벽하게 해독합니다.

+1

는 http://stackoverflow.com/questions/2925729/invalid-length-for-a-base-64-char-array –

답변

3

제공된 문자열이 FromBase64String 방법의 기준에 완전히 맞지 않으므로 규칙을 따르기 위해 끝 기호를 추가해야합니다. string에 끝 기호가 자동으로 추가되지는 않습니다.

가치없는 문자 "="가 후행 패딩에 사용됩니다. s의 끝은 0, 1 또는 2 개의 패딩 문자로 구성 될 수 있습니다. Source.

당신이 당신의 string의 끝에 "==" 추가 발생하는 문제를 해결합니다. 예를 들어

: string middle = "SomeString=="

+0

이 감사에 봐! 분명히 Base64로 인코딩 된 문자열을 던져 버린 블랙 박스가 패딩을 제거하고있었습니다. 방금 다시 추가했는데 한 번에 '='한 번에 다시 시도했습니다. 성공! – crackedcornjimmy