【问题标题】:What symmetric encryption algorithms implemented in both of c# and php do not requires fixed lenght of input data?c# 和 php 中实现的哪些对称加密算法不需要固定长度的输入数据?
【发布时间】:2013-06-07 21:20:49
【问题描述】:

目前我使用 AES 并且有一个问题,如果用户选择解码未加密的文件,我的 prog 总是以异常结束,即使在 try catch 放置并用完调试器时也是如此。

public static byte[] AES_Decrypt(byte[] data, string[] aes_key)
{
    RijndaelManaged aes = new RijndaelManaged();
    aes.KeySize = 256;
    aes.BlockSize = 256;
    aes.Mode = CipherMode.CBC;
    aes.Padding = PaddingMode.PKCS7;

    aes.Key = Encoding.Default.GetBytes(aes_key[0]);
    aes.IV = Encoding.Default.GetBytes(aes_key[1]);

    if (data.Length % (aes.BlockSize / 8) != 0)
        return null;

    var decrypt = aes.CreateDecryptor();

    using (MemoryStream ms = new MemoryStream())
    {
        using (CryptoStream cs = new CryptoStream(ms, decrypt, CryptoStreamMode.Write))
            try { cs.Write(data, 0, data.Length); } //crash here "data lenght for decryption is invalid" and "Padding is invalid and cannot be removed".
            catch (Exception exc) { return null; }

        return ms.ToArray();
    }
}

我对为什么 try and catch 不起作用不感兴趣,我需要一些解决方法来避免崩溃……而且更改加密方法很好。

【问题讨论】:

    标签: c# methods encryption-symmetric


    【解决方案1】:

    从我的角度来看,您不应该在该级别隐藏异常。当用户尝试解密未加密的数据时抛出异常似乎是加密模块的预期行为。

    相反,您应该在更高级别(加密模块之外)处理此异常。例如,你可以在你的 UI 层有这样的东西:

    try
    {
        var encryptedFilePath = ShowOpenFileDialog();
        var decryptedFilePath = TryDecryptFile(encryptedFilePath);
        ShowMessagePopup("Your file has been decrypted to: " + decryptedFilePath);
    }
    catch (CryptographicException)
    {
        ShowErrorPopup("Unable to decrypt file!\n" +
         "Please make sure the file you selected is valid");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多