加快加密速度

时间:2012-01-07 04:42:20

标签: c# networking encryption network-programming

所以这就是我现在正在加密的方式:

public static byte[] Encrypt(byte[] Data, string Password, string Salt)
        {
            char[] converter = Salt.ToCharArray();
            byte[] salt = new byte[converter.Length];
            for (int i = 0; i < converter.Length; i++)
            {
                salt[i] = (byte)converter[i];
            }

            PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, salt);
            MemoryStream ms = new MemoryStream();
            Aes aes = new AesManaged();
            aes.Key = pdb.GetBytes(aes.KeySize / 8);
            aes.IV = pdb.GetBytes(aes.BlockSize / 8);
            CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write);

            cs.Write(Data, 0, Data.Length); 
            cs.Close();

            return ms.ToArray();
        }

我正在通过网络使用此算法进行数据流传输。问题是我想要做的事情有点慢。所以我想知道是否有人有更好的方法吗?我不是加密专家,这种方法是从不同的来源拼凑而成的。我不完全确定它是如何工作的。

我的时钟频率约为0.5-1.5毫秒,我需要将它降低到约0.1毫秒?

2 个答案:

答案 0 :(得分:4)

我很确定这里的表现是你遇到的最少的问题。

每个包都重新使用盐吗?如果是这样,你就会以弱势的方式使用强大的密码。你正在使用完全相同状态的密码启动每个数据包。这是一个安全漏洞。只有几千个数据包才能破解加密技术。

我假设您正在向同一个接收器发送数据包流。在这种情况下,如果你保留Aes对象并重新使用它,你对AES的使用会更强大。这将使您对cypher的使用更加强大,更加强大,并且可以大大提高速度。

关于性能问题,大部分时间都花在初始化密码上。如果你不是每次都重新初始化它,你会加速很多。

答案 1 :(得分:0)

aes.KeySize>>3会比aes.KeySize / 8快。