CryptographicException未被用户代码处理

时间:2013-10-30 06:13:53

标签: c# encryption

在解密密钥时我收到错误:

  

CryptographicException未被用户代码处理   要解密的数据长度无效。

现在我想做的是,我想检查给定的字符串是否能够解密。如果它能够解密,那么我只想执行下面的代码。这样我就不会收到错误。

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

有什么方法可以检查吗?

2 个答案:

答案 0 :(得分:1)

我认为一个跟随的问题可能是:如果它无法解密,那么您的代码想要做什么。无论如何,你可以随时使用try ... catch:

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

答案 1 :(得分: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));
}