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