Tag: encryption symmetric

C#AES Rijndael – 检测无效密码

我正在使用Rijndael来加密程序中的一些敏感数据。 当用户输入错误的密码时,大多数情况下会抛出CryptographicException ,并显示消息“填充无效且无法删除”。 但是,如果概率非常小,CryptStream不会使用错误的密码抛出exception,而是会返回错误解密的流。 换句话说,它解密为垃圾。 知道如何检测/防止这种情况吗? 我能想到的最简单的方法是在加密时在消息的开头添加一个“幻数”,并在解密后检查它是否仍在那里。 但如果有一种更简单的方法,我很乐意听到它!

对大文件使用Rijndael加密

我需要安全地加密/解密n长度的文件,理想情况下使用Rijndael,但绝对是256位加密。 我以前玩过加密,并且非常高兴地加密/解密字符串和字节数组。 但是,因为我不知道文件的大小(并且所讨论的文件可能非常大(~2.5gb)非常可行,我不能只将它们加载到字节数组中并对它们进行加密/解密像我以前一样受限制。 因此,经过对Google的一些阅读后,我知道答案是以块的forms加密和解密文件,因此我生成了以下代码: private static void Enc(string decryptedFileName, string encryptedFileName) { FileStream fsOutput = File.OpenWrite(encryptedFileName); FileStream fsInput = File.OpenRead(decryptedFileName); byte[] IVBytes = Encoding.ASCII.GetBytes(“1234567890123456”); fsOutput.Write(BitConverter.GetBytes(fsInput.Length), 0, 8); fsOutput.Write(IVBytes, 0, 16); RijndaelManaged symmetricKey = new RijndaelManaged() { Mode = CipherMode.CBC}; ICryptoTransform encryptor = symmetricKey.CreateEncryptor(passwordDB.GetBytes(256 / 8), IVBytes); CryptoStream cryptoStream = new CryptoStream(fsOutput, encryptor, CryptoStreamMode.Write); for (long […]

使用C#和SymmetricAlgorithm进行真正简单的加密

我正在寻找一种非常简单的crypt / decrypt方法。 我将始终使用相同的静态密钥。 我知道这种方法的风险。 目前我正在使用以下代码,但在加密和删除相同的字符串后,它不会生成相同的结果(字符串中间有一些垃圾)。 public static string Crypt(this string text) { string result = null; if (!String.IsNullOrEmpty(text)) { byte[] plaintextBytes = Encoding.Unicode.GetBytes(text); SymmetricAlgorithm symmetricAlgorithm = DES.Create(); symmetricAlgorithm.Key = new byte[8] {1, 2, 3, 4, 5, 6, 7, 8}; using (MemoryStream memoryStream = new MemoryStream()) { using (CryptoStream cryptoStream = new CryptoStream(memoryStream, symmetricAlgorithm.CreateEncryptor(), CryptoStreamMode.Write)) […]