NET中OFB模式下的DES加密

时间:2020-10-25 09:51:02

标签: c# .net encryption des

这是我目前在.NET中对数据加密标准算法的实现,包括加密和解密:

static string Encrypt(string text, string key)
        {
            byte[] textBytes = ASCIIEncoding.ASCII.GetBytes(text);
            byte[] keyBytes = ASCIIEncoding.ASCII.GetBytes(key);

            DESCryptoServiceProvider provider = new DESCryptoServiceProvider();

            provider.Mode = CipherMode.OFB;

            ICryptoTransform transform = provider.CreateEncryptor(keyBytes, keyBytes);
            CryptoStreamMode mode = CryptoStreamMode.Write;

            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, mode);
            cryptoStream.Write(textBytes, 0, textBytes.Length);
            cryptoStream.FlushFinalBlock();

            byte[] encryptedTextBytes = new byte[memoryStream.Length];
            memoryStream.Position = 0;
            memoryStream.Read(encryptedTextBytes, 0, encryptedTextBytes.Length);

            string encryptedText = Convert.ToBase64String(encryptedTextBytes);

            return encryptedText;
        }

static string Decrypt(string text, string key)
        {
            byte[] textBytes = Convert.FromBase64String(text);
            byte[] keyBytes = ASCIIEncoding.ASCII.GetBytes(key);

            DESCryptoServiceProvider provider = new DESCryptoServiceProvider();

            provider.Mode = CipherMode.OFB;

            ICryptoTransform transform = provider.CreateDecryptor(keyBytes, keyBytes);
            CryptoStreamMode mode = CryptoStreamMode.Write;

            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, mode);
            cryptoStream.Write(textBytes, 0, textBytes.Length);
            cryptoStream.FlushFinalBlock();

            byte[] decryptedMessageBytes = new byte[memoryStream.Length];
            memoryStream.Position = 0;
            memoryStream.Read(decryptedMessageBytes, 0, decryptedMessageBytes.Length);

            string decryptedText = ASCIIEncoding.ASCII.GetString(decryptedMessageBytes);

            return decryptedText;
        }

但是它返回异常:OFB is not supported by this implementation。 有什么想法如何解决它,或在哪里可以找到有效的OFB实施方案?

0 个答案:

没有答案