Tag: rijndaelmanaged

RijndaelManaged的AES OFB加密

我需要通过OFB模式下的加密消息从C#应用程序通信到另一个应用程序。 我知道RijndaelManaged不支持AES OFB模式。 有没有比我更有经验的人知道使用OFB模式加密/解密的任何其他方法?

Aes解密器给出空字符串

我有AES加密/解密的问题。 注释的代码工作,但有时给出错误“填充无效,无法删除”所以我更改它,因为它在这里解释填充无效,无法删除exception,而使用“AesManaged”解密字符串C# 但是当我尝试它时,解密过程中的代码会给出一个空字符串。 我不知道哪里弄错了。 两个静态函数bytesToString和stringToBytes与加密无关,我在其他地方使用它们。 密钥长度和块大小是OKAY。 我在debbuger中找到了这个: “’csEncrypt.Length’引发了’System.NotSupportedException’类型的exception” 我在3.5 .NET Visual STudio 2008上工作 这是来自调试器的prtscr,因为你可以看到离开块后加密的是0字节长,而cryptostream有一些例外 从调试器打印屏幕 怎么解决? 请给我一些线索。 static class Aes { public static string bytesToHexString(byte[] key) { return BitConverter.ToString(key).Replace(“-“, String.Empty); } public static byte[] stringToBytes(string key) { return Enumerable.Range(0, key.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(key.Substring(x, 2), 16)) .ToArray(); } public […]

为我的AES方法创建一个字节数组的字符数是多少?

我在这里使用AES方法: http : //msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx 我想要一个字符串值,我将转换为字节数组并将其传递给AES加密方法。 字符串应该有多少个字符来生成方法所需的正确字节数组大小? static byte[] encryptStringToBytes_AES(string plainText, byte[] Key, byte[] IV) { // Check arguments. if (plainText == null || plainText.Length <= 0) throw new ArgumentNullException("plainText"); if (Key == null || Key.Length <= 0) throw new ArgumentNullException("Key"); if (IV == null || IV.Length <= 0) throw new ArgumentNullException("Key"); // Declare the stream […]

C#AES Rijndael – 检测无效密码

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

逐行加密/解密文件?

我是加密的新手,我正在努力让逐行加密器工作; 我需要能够在应用程序运行期间将加密的行附加到文件中,而不是仅仅进行一次大规模加密 – 所有内容和保存。 虽然我有一个时间的野兽。 这是我的加密器,经过多次尝试失败后无耻地被盗: class Encryption { private static readonly byte[] SALT = new byte[] { 0x26, 0xdc, 0xff, 0x00, 0xad, 0xed, 0x7a, 0xee, 0xc5, 0xfe, 0x07, 0xaf, 0x4d, 0x08, 0x22, 0x3c }; public static byte[] Encrypt(byte[] plain, string password) { MemoryStream memoryStream; CryptoStream cryptoStream; Rijndael rijndael = Rijndael.Create(); Rfc2898DeriveBytes pdb = new […]

使用Rijndael加密/解密文件

我需要传输xml文件,并且需要加密它们。 我发现一些例子认为我很接近,但是当我解密文件时,我最终得到了尾随垃圾字符。 有一些关于这个的post,但我没有看到任何将完全有帮助。 这是加密和解密代码。 private void EncryptFile(string inputFile, string outputFile, string key) { try { byte[] keyBytes; keyBytes = Encoding.Unicode.GetBytes(key); Rfc2898DeriveBytes derivedKey = new Rfc2898DeriveBytes(key, keyBytes); RijndaelManaged rijndaelCSP = new RijndaelManaged(); rijndaelCSP.Key = derivedKey.GetBytes(rijndaelCSP.KeySize / 8); rijndaelCSP.IV = derivedKey.GetBytes(rijndaelCSP.BlockSize / 8); ICryptoTransform encryptor = rijndaelCSP.CreateEncryptor(); FileStream inputFileStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read); byte[] inputFileData = […]

对大文件使用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 […]

错误的PKCS7填充错误:无效长度106

我正在尝试使用以下函数进行加密和解密,但是,它会导致填充错误。 如果我将PaddingMode设置为None ,则会在Log中返回一些字母字符和随机符号。 我可能会错过设置正确结构的内容,如下所示: Cipher Rijndael(AES) 块大小128位(16字节) 模式CBC(密码块链接)密钥 MD5哈希密码 IV与密钥相同 数据编码Base64字符 UTF-8编码 任何帮助修复此错误以及确保满足上述结构的任何帮助将不胜感激! 谢谢 错误 CryptographicException: Bad PKCS7 padding. Invalid length 106. Mono.Security.Cryptography.SymmetricTransform.ThrowBadPaddingException (PaddingMode padding, Int32 length, Int32 position) (at /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/Mono.Security.Cryptography/SymmetricTransform.cs:363) Mono.Security.Cryptography.SymmetricTransform.FinalDecrypt (System.Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) (at /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/Mono.Security.Cryptography/SymmetricTransform.cs:515) Mono.Security.Cryptography.SymmetricTransform.TransformFinalBlock (System.Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) (at /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/Mono.Security.Cryptography/SymmetricTransform.cs:554) System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock (System.Byte[] inputBuffer, Int32 inputOffset, Int32 […]

从cryptostream读取到流的末尾

我在使用下面的代码时遇到了一些麻烦。 我有一个临时位置的文件,需要加密,此function加密该数据,然后存储在“pathToSave”位置。 在检查时似乎没有正确处理整个文件 – 我的输出中缺少一些位,我怀疑它与while循环没有贯穿整个流有关。 顺便说一句,如果我尝试在while循环后调用CryptStrm.Close(),我会收到exception。 这意味着如果我尝试解密文件,我会得到一个已经在使用的文件错误! 尝试了所有平常和我在这里看到类似的问题,任何帮助都会很棒。 谢谢 public void EncryptFile(String tempPath, String pathToSave) { try { FileStream InputFile = new FileStream(tempPath, FileMode.Open, FileAccess.Read); FileStream OutputFile = new FileStream(pathToSave, FileMode.Create, FileAccess.Write); RijndaelManaged RijCrypto = new RijndaelManaged(); //Key byte[] Key = new byte[32] { … }; //Initialisation Vector byte[] IV = new byte[32] { … […]

指定的初始化向量(IV)与此算法的块大小不匹配

我正在研究基本加密方法。 我正在使用RijndaelManaged。 我很久以前从某个地方得到了这段代码,但不记得在哪里。 之前我的代码工作正常,但是有些东西发生了变化,我无法理解它。 当我运行我的代码时,我收到以下错误; 指定的初始化向量(IV)与此算法的块大小不匹配。 这是我的代码: string textToEncrypt = “TEST STRING”; int keySize = 256; string hashAlgorithm = “SHA1”; string passPhrase = “AH!PSB0%FGHR$”; string saltValue = “LRT%YUR#VBNL@1”; string initVector = “HR$2pIjHR$2pIj”; byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector); byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue); byte[] plainTextBytes = Encoding.UTF8.GetBytes(textToEncrypt); var password = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, 2); byte[] keyBytes = […]