1

私は C# と暗号化が初めてで、 CodeProjectStackOverflowなどのさまざまなソースからデータを取得して、以下のコードを作成しました。

public class CryptoSafe
{
    private const int SaltSize = 8;

    public void EncryptAndWrite(FileInfo targetFile, string password)
    {
        FileStream stream = new FileStream(targetFile.FullName, FileMode.Open, FileAccess.Write);

        DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider();
        // 
        var keyGenerator = new Rfc2898DeriveBytes(password, SaltSize);
        var rijndael = Rijndael.Create();
        var length = rijndael.BlockSize;

        // BlockSize, KeySize in bit --> divide by 8
        cryptic.IV = keyGenerator.GetBytes(rijndael.BlockSize / 16);
        cryptic.Key = keyGenerator.GetBytes(rijndael.KeySize / 32);

        CryptoStream crStream = new CryptoStream(stream, cryptic.CreateEncryptor(), CryptoStreamMode.Write);
        byte[] data = ASCIIEncoding.ASCII.GetBytes(System.DateTime.Now.ToString("dd-MMM-yyyy HH;mm:ss"));

        crStream.Write(data, 0, data.Length);

        crStream.Close();
        stream.Close();
    }



    public string DecryptAndRead(FileInfo sourceFile, string password)
    {
        FileStream stream = new FileStream(sourceFile.FullName, FileMode.Open, FileAccess.Read);
        DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider();
        // read salt
        //var fileStream = sourceFile.OpenRead();
        //var salt = new byte[SaltSize];
        // fileStream.Read(salt, 0, SaltSize);

        // initialize algorithm with salt
        var keyGenerator = new Rfc2898DeriveBytes(password, SaltSize);
        var rijndael = Rijndael.Create();
        cryptic.IV = keyGenerator.GetBytes(rijndael.BlockSize / 16);
        cryptic.Key = keyGenerator.GetBytes(rijndael.KeySize / 32);

        // decrypt
        CryptoStream crStream = new CryptoStream(stream, cryptic.CreateDecryptor(), CryptoStreamMode.Read);
        StreamReader reader = new StreamReader(crStream);

        string data = reader.ReadToEnd();

        reader.Close();
        stream.Close();
        return data;
    }

}

暗号化は順調に進んでおり、ファイルに書き込まれています。ただし、ファイルの復号化中に「Bad Data」というエラーが発生します。SOで検索してみましたが、あまり役に立ちませんでした。

私は何を間違っていますか?助けてください!

4

1 に答える 1

2

それで、あなたは何を間違っていますか。

1st DES は90 年代から力ずくでクラック可能でした。

2 つ目は、暗号化と復号化のランダム ソルトが異なるため、復号化できません。

第 3 に、crypto には多くの間違いがあります。より良い例から始めるか、高レベルのライブラリを使用するかのいずれかで、一見簡単です。

于 2013-05-06T13:30:50.337 に答える