我应该为每个要加密的字符串创建一个新的 SecretKey 吗?

Should i create a new SecretKey for every String that i want to encrypt?

我想加密每个创建帐户的人的 firstNamelastName 并将加密文件存储到数据库中。 然后仅当安全请求到达 @RestController

时才将它们解密回来

我使用来自 javax.crypto.CipherCipher class 我将用于加密的密钥存储在 KeyStore.getInstance("JCEKS")

我的问题是,我应该为每个要加密的项目创建一个新的 SecretKey 还是创建一个密钥并用它完成所有工作?

换句话说,userOne的信息应该得到encrypted/decrypted与secretKeyEntryOne, userTwo - secretKeyEntryTwo, userThree - secretKeyEntryThree 等等 所有用户的所有信息应该是 encrypted/decrypted 和 globalSecretKey ?

如果你不明白这个问题的意思,请告诉我,我会编辑我的问题。

提前致谢。

TL;DR: 有很多密码 (SecretKey)。它提供了更好的安全性。


从安全的角度来看,最好为每个用户设置一个 SecretKey,因为这将减少在数据泄露的情况下泄露所有用户信息的可能性,其中您的 globalSecretKey 被泄露。拥有多个 SecretKey 可以更好地保护这些信息,因为最坏的情况是只有一个客户的信息被泄露。

如果您不希望拥有一百万种不同的组合,您可以有一个列表(大约 500;更多 === 更好),其中 ciphers 是随机选择的。这减少了所有用户数据被泄露的可能性。尽管如果您有 space 将每个用户存储为一个特殊密钥,我建议您改为这样做。