繁体   English   中英

不良数据:密码学C#

[英]Bad Data: Cryptography C#

我是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;
    }

}

加密进行得很好,并且正在写入文件中。 但是,在解密文件时会出现错误“错误数据”。 我尝试在SO上搜索它,但是并没有太大帮助。

我究竟做错了什么? 请帮忙!

所以,你在做什么错。

1 DES一直强力攻破 90年代以来。

第二,您对加密和解密使用不同的随机盐,因此您将永远无法解密。

第三,使用密码会犯很多错误,这看似容易,要么从一个更好的例子开始,要么使用一个高级

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM