Java 基于公共字符串的Android RSA加密

Java 基于公共字符串的Android RSA加密,java,android,encryption,rsa,Java,Android,Encryption,Rsa,我正在开发一个android应用程序,希望用户能够使用他人的公钥加密消息。系统将生成一个公钥/私钥对,然后可以秘密地将消息发送给其他用户 我正在创建一个加密类,它将处理消息的加密/解密。不幸的是,我遇到了一些问题 在这个方法中,我希望传递用户的秘密(私钥)以及他们想要加密的消息。我希望这个秘密是用户定义的(比如“MySecretPassword”) 例外情况如下: java.security.spec.InvalidKeySpecException: java.lang.RuntimeExcep

我正在开发一个android应用程序,希望用户能够使用他人的公钥加密消息。系统将生成一个公钥/私钥对,然后可以秘密地将消息发送给其他用户

我正在创建一个加密类,它将处理消息的加密/解密。不幸的是,我遇到了一些问题

在这个方法中,我希望传递用户的秘密(私钥)以及他们想要加密的消息。我希望这个秘密是用户定义的(比如“MySecretPassword”)

例外情况如下:

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0740b0:ASN.1 encoding routines:ASN1_get_object:TOO_LONG

我错过了什么?我是否遗漏了一些明显的东西,或者我误解了这些工具的工作原理?我以前使用过javascript库进行公钥/私钥加密,现在尝试做类似的事情。如果有人能给我指出正确的方向,我将不胜感激:)

秘密不是公钥

您可以使用收件人的公钥进行加密。该值为public,这意味着任何人都可以查找它。您需要获取另一方公钥的值并将其输入到您的代码中,而不是发送您自己的私钥。正确的方法不涉及任何秘密

通常不使用RSA直接加密消息,而是使用RSA加密AES密钥(或其他对称密钥),并使用AES密钥加密消息。如果您的消息很短,您可以直接使用RSA,但它不适用于长消息

以下是几个链接,展示了如何在Android上实现RSA:


“其他用户的消息可以使用他们的公钥解密。”所以它们不是秘密,因为每个人都知道公钥?您的错误:您不想基于X509编码的数据生成密钥,而是想基于密码生成密钥:啊,我在键入时把事情弄混了。用户应使用其目标的公钥对消息进行加密(例如,如果我想将消息发送给我的朋友,则使用该朋友的公钥进行加密)。我来看看你发布的链接:)也许这只是一个输入错误,但公钥是大家都知道的,你可以用它加密数据,只有接收者(=私钥所有者)才能解密。这就是发送消息的安全方式。编辑:是的。
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0740b0:ASN.1 encoding routines:ASN1_get_object:TOO_LONG