0

我使用DES加密了一个文件,然后在服务器上成功解密并使用

System.IO.File.WriteAllBytes(@"c:\test\" + fileName, decryptedFile);

方法文件数据发生了一点变化,文本是“加密和解密usind DES blah blah blah”,解密后最终文件中的文本是“k$nlng and Decrypting usind DES blah blah blah”,我也试过这个:

using (BinaryWriter binWriter =
                        new BinaryWriter(File.Open(@"C:\Test\" + fileName, FileMode.Create)))
                {
                    binWriter.Write(decryptedFile);
                }

文本仍然不一样的加密方式:

public byte [] DESEncrypt(byte [] fileBytes)
    {
        CryptoStreamMode mode = CryptoStreamMode.Write;

        // Set up streams and encrypt
        MemoryStream memStream = new MemoryStream();
        CryptoStream cryptoStream = new CryptoStream(memStream, 
            cryptoProvider.CreateEncryptor(cryptoProvider.Key, cryptoProvider.Key), mode);
        cryptoStream.Write(fileBytes, 0, fileBytes.Length);
        cryptoStream.FlushFinalBlock();

        // Read the encrypted message from the memory stream
        byte[] encryptedMessageBytes = new byte[memStream.Length];
        memStream.Position = 0;
        memStream.Read(encryptedMessageBytes, 0, encryptedMessageBytes.Length);
        MessageBox.Show("encrypted DES");
        return encryptedMessageBytes;
    }

解密:

static public byte[] DESdecrypt(byte [] fileBytes)
    {

        ICryptoTransform decryptor = cryptoProvider.CreateDecryptor();
        byte[] originalAgain = decryptor.TransformFinalBlock(fileBytes, 0, fileBytes.Length);

        return originalAgain;
    }

谢谢

4

2 回答 2

0

很难说,不是该主题的专家,而是在加密之前和加密和解密之后比较您的字节。如果它们相同,则该过程没有问题。WriteALLBytes 可能不是唯一的。认为 MIME 类型。一个类似的问题是我必须明确说明我要保存的文件类型。

于 2012-04-28T04:31:33.880 回答
0

您为“key”和“iv”值传递了相同的值。每次调用该函数时,您的“iv”值都会更新(因此,您的密钥会更改)。

所以你基本上是这样做的:

key = "key" 加密 (key, key)

-- 密钥现在已更改。

你需要做的是:

key = "key" iv = 密钥副本 Encrypt (key, iv)

于 2012-04-28T04:57:14.783 回答