2012-01-25 5 views
1

This article 왜 문자열 Encoding을 사용하여 암호 텍스트를 왕복 이동해서는 안되는지 설명합니다. 그러나 권장 된 Convert.ToBase64String을 사용하려고 시도하면 원래 문자열이 4 바이트 블록으로 패키징되지 않은 경우 예외가 발생합니다. 다음 예제에서는 원래 문자열이 작동하지 않지만 단지 "Zoidberg"는 길이가 8 바이트이므로 (Convert.ToBase64String을 사용하면 6 바이트 배열로 패키징 됨) 수행됩니다.Crypto API 용 문자열을 바이트 배열로 변환

문서에서 약속 한대로 문자열 인코딩을 사용하면 값을 해독 할 때 "잘못된 데이터"오류가 발생합니다. 그렇다면 원본 문자열을 바이트 배열로 암호화 API에 어떻게 공급해야합니까?

 
string text = "Zoidberg is important!"; 
RSACryptoServiceProvider provider = new RSACryptoServiceProvider(); 
// This throws FormatException: "The input is not a valid Base-64 string as it 
// contains a non-base 64 character, more than two padding characters, 
// or a non-white space character among the padding characters" 
byte[] cipherText = provider.Encrypt(Convert.FromBase64String(text), false); 
string plainText = Convert.ToBase64String(provider.Decrypt(cipherText, false)); 

+1

'FromBase64String'은 "범인"입니다 (하지만 실제로는 아닙니다). "="패딩이 필요합니다 (위키피디아의 [base-64 인코딩] (http://en.wikipedia.org/wiki/Base64) 참조). 그러나 "Zoigberg ..."*는 어쨌든 유효한 기본 64 문자열이 아니므로 패딩이 올바르더라도 여전히 잘못된 입력입니다. –

답변

0

나는 당신이 그 기사로 오도되었다고 생각합니다. string -> byte[] --> encrypted byte[] --> string에서 변환하는 것은 의미가 없습니다.이 문서에서 보여주는 내용은 이 아닙니다.

아마도 여러분은 가고 싶습니다. string -> byte[] -> encrypted byte[] -> (network, whatever) -> encrypted byte[] -> byte[] -> string. Encoding을 사용하면이 방법으로 문자열을 바이트로 변환 할 수 있습니다. 당신이 링크 된 문서에서는 암호화 된 바이트을 복용하고 직접 다시 문자열이 변환에 대해 경고하는 이유

나도 몰라. 바보 같아.

암호문을 왕복 이동하려고하므로 문자열의 암호화 된 바이트가 포함 된 바이트 배열을 사용하고 base-64 인코딩을 잊어 버리십시오.

관련 문제