我应该使用消息来加密自身吗?

Should I use the message to encrypt itself?

我想加密信息,比如密码。 AES 需要一个用于加密和解密的密码。如果密码与被加密的消息完全相同,这会影响加密强度吗?

If the passphrase is exactly the same as the message being encrypted, does this affect the strength of the encryption?

当然可以。它创建了一个 1:1 明文到密文的映射,这很可怕,即使它不是 "encrypt with self." 但与存储密码的理想相比,它实际上更糟糕。

首先,您需要记住 AES 密钥的长度必须恰好为 16 个字节。仅此而已。因此,为了使您的计划有意义,我们只能将其应用于恰好 16 个字节长的 "passphrases"(我在最弱的含义中使用这些词)。这不是一个特别有用的结构。但是,让我们考虑一下这种有限的情况。

您要存储一些东西 E(x,x)) such that D(E(x,x)) == x。与所有可能的 x(其中 x 恰好 16 个字节长)相比,这是一个很小的 ​​space,但为什么我说 "infinitely worse?" 因为我们将它与存储零字节进行比较,这是另一种选择。由于这里的"x"必须由调用者提供,所以绝对没有理由存储E(x,x)。 "E" 在这里没有做任何工作。我可以 re-write 函数 D 为:

D: (d, p) -> p

(其中"d"为密文,"p"为密码)

我简直可以忽略密文。它可以是零字节长。它可以是任何东西。我真的不在乎。这比任何其他可以想到的加密方案都要好,后者必然会泄露一些关于 p.

的信息

当我们考虑 "not 16 bytes long." 的情况时,这里没有什么比这更好的了。在那种情况下,我需要某种 KDF(密钥派生函数)。但我什至需要它的唯一原因是因为你注入了 "AES" 在这里不起作用。纸上谈兵应该能让你相信 D(E(KDF(x), x)) == x 并不比我们开始的时候好。

这是一个什么都不做的加密系统。它只说 "if I know X, the function will return me X." 如果我已经知道 X,为什么还要调用函数?

任何这可能有用的东西,任何 SHA-2 散列都可以更好地解决。