Java 如何使用给定的数据同时生成公钥和私钥?

Java 如何使用给定的数据同时生成公钥和私钥?,java,php,android,authentication,rsa,Java,Php,Android,Authentication,Rsa,我是一名大学生,有一个任务要做的安全要求“不存储在服务器上的全部秘密,但仍然能够验证”。我的方案是在客户端制作RSA密钥对,将公钥存储在服务器上,然后丢弃私钥。当需要身份验证时,服务器将使用存储的私钥对某些字符串进行加密,让客户端再次生成相同的密钥,并使用密钥对其进行解密,然后发送回服务器 (可能)解释如下 某些数据--处理-->RSA-1024(或更好)私钥+公钥 私钥必须生成,并且每次都是相同的 公钥必须存储在服务器上,并与给定的私钥兼容 问题在于处理,我想让客户端在每次我想要的时候生成

我是一名大学生,有一个任务要做的安全要求“不存储在服务器上的全部秘密,但仍然能够验证”。我的方案是在客户端制作RSA密钥对,将公钥存储在服务器上,然后丢弃私钥。当需要身份验证时,服务器将使用存储的私钥对某些字符串进行加密,让客户端再次生成相同的密钥,并使用密钥对其进行解密,然后发送回服务器

(可能)解释如下

某些数据--处理-->RSA-1024(或更好)私钥+公钥

  • 私钥必须生成,并且每次都是相同的
  • 公钥必须存储在服务器上,并与给定的私钥兼容
问题在于处理,我想让客户端在每次我想要的时候生成相同的密钥(可以使用一些数据的散列作为输入),但我不知道如何配置它。私钥和公钥仍然需要相互兼容

如果用户更改设备,设备中的强私钥会导致应用程序无法使用

我一直在努力研究,但大多数人说,我必须将密钥保存在设备上,否则每次都会生成一个新密钥,这不是我的目标

我已经和我的项目老师谈过了,这个计划通过了。但是如果此方案有任何错误,或者如果您有任何建议,我仍然需要更多的评论。我仍然想知道这个方案是否比存储散列数据并保存以供验证更好

我的方案必须在Android客户端和PHP服务器上运行


非常感谢您的阅读,如果此线程中有任何错误,请道歉。我是新来的,但这次我很确定这个线程没有重复

公钥加密不是这样工作的。您使用公钥编码,使用私钥解码,反之亦然。如果你把其中一个扔掉,那就没用了。如果你想问一些关于密码系统设计的问题,crypto.stackexchange.com会是一个更好的地方。当你有需要帮助的实际代码,而不是设计问题时,来这里;就像这样。实际上,你不应该用私钥加密,因为你很有可能会让你的私钥易受攻击。您可能的意思是,用户键入一个密码,该密码用于种子CSPRNG,然后用于动态生成RSA密钥对。客户端在注册帐户时会将公钥发送到服务器。在登录时,客户端可以重新生成RSA私钥,并签署类似于当前时间的内容。服务器可以使用存储的公钥来验证当前时间。这是可以做到的(需要做大量工作),但我不认为这比通过哈希(PBKDF2、bcrypt、scrypt或Argon2)使用适当的身份验证更好。