Encryption 为什么不能将AES用作哈希算法的一部分?

Encryption 为什么不能将AES用作哈希算法的一部分?,encryption,hash,cryptography,Encryption,Hash,Cryptography,AES可以用作哈希算法的一部分。如果输入数据用作键。下面是一个可能的例子。这能用吗?安全吗 static byte[] AesOneWayEncrypt(byte[] input) { using (Aes aes = Aes.Create()) { aes.Key = keccak.ComputeBytes(input).GetBytes(); Array.Copy(keccak.ComputeBytes(

AES可以用作哈希算法的一部分。如果输入数据用作键。下面是一个可能的例子。这能用吗?安全吗

static byte[] AesOneWayEncrypt(byte[] input)
    {
        using (Aes aes = Aes.Create())
        {
            aes.Key = keccak.ComputeBytes(input).GetBytes();
            Array.Copy(keccak.ComputeBytes(aes.Key).GetBytes(), aes.IV, 16);

            ICryptoTransform encryptor = aes.CreateEncryptor();

            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                {
                    cs.Write(data);
                }
                encryptedData.AddRange(ms.ToArray());
            }

        }
    }

这是可能的,但这是性能和安全性的折衷。好的散列函数的要求与好的加密算法的要求不同。例如,请阅读此处:

不清楚cs.Writedata中有哪些数据。那是某种固定的字符串吗?如果您已经有了Keccak,为什么要尝试将其转换为另一个AES哈希函数?AES在这里实现了什么Keccak还没有实现的?安全哈希算法不使用密钥。如果您正在寻找基于Keccak的MAC,请尝试使用KMAC算法,或者使用效率较低的HMAC和Keccak。