2013-10-30 141 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 ... catch像:

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

我已經在使用try catch塊。並在try catch博客中生成exeception日誌併發送電子郵件。這是我不想要的。並因此有必要檢查字符串是否是有效的base64字符串。 – SpiderCode

+0

我已找到相同的解決方案和更新的解決方案的問題。順便謝謝你的建議。 :) – SpiderCode

相關問題