2013-10-30 4 views
2

내가 오류를 얻고 키의 암호를 해독하는 동안 :CryptographicException는 사용자 코드에 의해 처리되지 않은했다

CryptographicException 사용자 코드에 의해 처리되지 않은이었다.
해독 할 데이터의 길이가 유효하지 않습니다.

이제 원하는 문자열이 해독되는지 여부를 확인하고 싶습니다. 그것이 해독 할 수있는 경우에만 아래 코드를 실행하고 싶습니다. 그래서 나는 오류를 얻을 수 없다.

var byteBuff = Convert.FromBase64String(value); 
var strDecrypted = Encoding.ASCII.GetString(
        objDesCrypto.CreateDecryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length)); 

확인할 방법이 있습니까?

답변

0

해결책을 찾았습니다. 유효한 base64 문자열을 확인해야합니다 :

if ((value.Length % 4 == 0) && Regex.IsMatch(value, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None)) 
{ 
    var byteBuff = Convert.FromBase64String(value); 
    decryptedString = 
     Encoding.ASCII.GetString(
      objDesCrypto.CreateDecryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length)); 
} 
1

다음 질문이 될 수 있다고 생각합니다. 해독 할 수없는 경우 코드에서 무엇을하고 싶습니까? 어쨌든 그걸로 생각하면, 당신은 항상 시도 잡으려고 사용할 수 있습니다 :

try { /* your code */ } 
catch (CryptographicException e) { /* whatever you need to if it is not able to */ } 
+0

이미 try catch 블록을 사용하고 있습니다. try catch 블로그에서 exeception log를 생성하고 이메일을 보냅니다. 이것은 내가 원하지 않는 것입니다. 이 때문에 문자열이 유효한 base64 문자열인지 여부를 확인해야합니다. – SpiderCode

+0

나는 솔루션을 통해 동일하고 업데이트 된 질문에 대한 해결책을 찾았습니다. 그건 그렇고, 당신의 제안에 감사드립니다. :) – SpiderCode

관련 문제