Android 如何存储RSA私钥、公钥

Android 如何存储RSA私钥、公钥,android,encryption,rsa,private-key,Android,Encryption,Rsa,Private Key,我正在开发一个android消息应用程序。当用户注册时,会生成rsa私钥和公钥,并使用这些密钥和aes消息进行加密和解密 私钥存储在手机中,公钥存储在服务器中。如果用户重置或卸载应用程序,所有密钥都将丢失,因此无法解密旧消息 当用户卸载应用程序时,如何在不将旧私钥存储在服务器上的情况下检索旧私钥?在Android中保存数据有多种方法。数据库、SavedInstanceState、SharePreferences和文件。用户卸载应用程序后,只有文件才能保存。将数据保存到文件中是您唯一的选择。在An

我正在开发一个android消息应用程序。当用户注册时,会生成rsa私钥和公钥,并使用这些密钥和aes消息进行加密和解密

私钥存储在手机中,公钥存储在服务器中。如果用户重置或卸载应用程序,所有密钥都将丢失,因此无法解密旧消息


当用户卸载应用程序时,如何在不将旧私钥存储在服务器上的情况下检索旧私钥?

在Android中保存数据有多种方法。数据库、SavedInstanceState、SharePreferences和文件。用户卸载应用程序后,只有文件才能保存。将数据保存到文件中是您唯一的选择。

在Android中保存数据有多种方法。数据库、SavedInstanceState、SharePreferences和文件。用户卸载应用程序后,只有文件才能保存。将密钥保存在文件中是您唯一的选择。

您是使用Android密钥库存储密钥还是使用自己的文件存储

Android密钥库

使用Android密钥库无法恢复密钥,因为它们只能由创建密钥的应用程序使用,如果有重大更改,则会被丢弃

我猜您正在使用RSA密钥协商AES对称加密密钥。因此,您需要备份AES加密密钥(例如,在服务器中…),并建立一种机制来恢复密钥,就像常见的“记住密码”实用程序一样

自定义密钥存储

如果在没有AndroidKeystore的情况下将密钥存储到设备中,则可以定义自己的机制来恢复密钥。例如,使用密码加密密钥,并将密钥存储到设备的公共目录中。然后可以恢复密钥,提示用户输入密码


注意:考虑每种情况下的安全风险。例如,将未加密的AES密钥放入服务器意味着恶意服务器可以解密消息。或者弱恢复密钥机制会降低系统的整体安全级别

您是使用Android密钥库存储密钥还是使用自己的文件存储

Android密钥库

使用Android密钥库无法恢复密钥,因为它们只能由创建密钥的应用程序使用,如果有重大更改,则会被丢弃

我猜您正在使用RSA密钥协商AES对称加密密钥。因此,您需要备份AES加密密钥(例如,在服务器中…),并建立一种机制来恢复密钥,就像常见的“记住密码”实用程序一样

自定义密钥存储

如果在没有AndroidKeystore的情况下将密钥存储到设备中,则可以定义自己的机制来恢复密钥。例如,使用密码加密密钥,并将密钥存储到设备的公共目录中。然后可以恢复密钥,提示用户输入密码


注意:考虑每种情况下的安全风险。例如,将未加密的AES密钥放入服务器意味着恶意服务器可以解密消息。或者,弱恢复密钥机制将降低系统的整体安全级别

消息使用随机生成的aes密钥加密,该密钥对于发送的每条消息都是唯一的,aes密钥使用rsa加密并与消息一起发送。消息发送后,其从服务器上删除。消息等待时会出现问题若要在服务器中交付且用户重置应用程序,它还将重置加密应用程序的公钥和私钥。如果应用程序重新启动,则需要为未连接到应用程序的RSA私钥提供备份。使用密码加密RSA密钥,如我上面所述。并将密钥存储到服务器或设备本身的持久文件中。缺点是,您需要向用户请求密码,这不是用户友好的。消息使用随机生成的aes密钥加密,该密钥对于发送的每封消息都是唯一的,并且aes密钥使用rsa加密并与消息一起发送。消息发送后,其将从服务器上删除。当发送消息时,会出现问题等待在服务器中交付,用户重置应用程序它还会重置加密它的公钥和私钥当您需要备份未连接到应用程序的RSA私钥时,如果应用程序重新启动,该私钥将可用。使用密码加密RSA密钥,如我上面所述。并将密钥存储到服务器或设备本身的持久文件中。缺点是,您需要向用户请求密码,但这对用户不友好。现在,它已存储在DB和sharedprefernce中。在卸载应用程序后,密钥存储库是否保留数据。现在,它已存储在DB和sharedprefernce中。在卸载应用程序后,密钥存储库是否保留数据。