使用等于数据的密钥对数据进行编码是否可以?

Is it OK to encode data using key equal to data?

对于某些项目,我需要以加密形式存储一些短字符串。对于当前的目的,使用它本身对其进行加密是最理想的。

# This would be the usual way:
result = AES_ENCRYPT(string, key)

# but I would like to do it this way:
result = AES_ENCRYPT(string, string)

相同的字符串本身将用作键!

'string'总是一些短文本,比如20个字符的字母和数字。这个解决方案对我来说似乎比使用任何散列函数都好,因为散列可能导致冲突——不同的字符串可能会产生相同的结果,我知道这是低概率的,但仍然不为零,所以我想避免这种情况。

我的问题是,我的方法安全吗?使用数据本身对数据进行编码,是否会导致任何安全问题?如果 'attacker' 知道它是通过加密我的方式产生的,这是否意味着它可以更容易地解密结果?谢谢。

注:为了问题的简单,我没有提到一些没有必要解释的事情。相信我,我知道我在做什么。我只是想问一下这种方法是否会导致任何麻烦。

加密仅在使用相同密钥时保证唯一性。如果您使用不同的密钥,则无法保证唯一性。如果要保证输出的唯一性,请保持相同的键并确保输入字符串是唯一的。您可以只接受唯一的字符串(如用户名),或者向字符串添加盐以使其他相同的字符串唯一。