我用这个答案来指导自己here ,其中解释了如何使用 AES 和 RSA。
我成功地使用一个 util 类实现了 AES 部分,在该类中我使用密码来生成 key 。该密码不会更改,其目的是在编码并将其保存到数据库之前对密码进行加密。然后,每当我需要解密该密码时,我都可以使用相同的密码短语来解密,这应该生成相同的 key 。我已经成功了。
现在我的问题从 RSA 开始。我必须通过 Java JAX-RS Web 服务通过 JSON 发送信息来注册用户。由于“技术”原因,HTTPS/SSL 是不可能的。因此,我至少尝试发送使用公钥加密的密码。并用服务器上的私钥解密。
然后我使用 AES 对其进行加密并将其存储在数据库中。
如果我每次都必须生成不同的 key ,那么在这一切发生之前,我的客户端(android)如何知道公钥?
最佳答案
您不必每次都生成新的 RSA key 。您可以简单地每次使用公钥进行加密。如果数据太大,那么您应该尝试使用混合加密(即每次生成随机 AES key ,用它加密消息,然后用 RSA key 对的公钥加密 AES key )。
您只需在 Android 应用程序中分发公钥即可。
如果您想存储用于身份验证的密码,最好不要在服务器上使用对称加密,在服务器上生成盐并对密码执行 PBKDF2。然后存储盐和PBKDF2的结果。然后,每当进行身份验证尝试时,检索盐,再次执行 PBKDF2 函数并将结果与数据库中的值进行比较。
关于java - RSA key key 静态生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23086424/