所以这就是我现在正在加密的方式:
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毫秒?
答案 0 :(得分:4)
我很确定这里的表现是你遇到的最少的问题。
每个包都重新使用盐吗?如果是这样,你就会以弱势的方式使用强大的密码。你正在使用完全相同状态的密码启动每个数据包。这是一个安全漏洞。只有几千个数据包才能破解加密技术。
我假设您正在向同一个接收器发送数据包流。在这种情况下,如果你保留Aes对象并重新使用它,你对AES的使用会更强大。这将使您对cypher的使用更加强大,更加强大,并且可以大大提高速度。
关于性能问题,大部分时间都花在初始化密码上。如果你不是每次都重新初始化它,你会加速很多。
答案 1 :(得分:0)
aes.KeySize>>3
会比aes.KeySize / 8
快。