使用java进行公钥加密(加密字符串长度与原始字符串长度相同)

使用java进行公钥加密(加密字符串长度与原始字符串长度相同),java,string,security,encryption,rsa,Java,String,Security,Encryption,Rsa,我试图在java中找到一种公钥加密方法,它将生成和原始字符串长度相同的字符串。通常的rsa不起作用。它为3个字符串生成一个非常长的字符串。我想为我的项目做的是用一个密钥加密一个字符串,然后用一个密钥再次加密它,但是有一个长字符串会大大减慢这个过程。有什么建议吗 RSA没有流密码模式,可以创建与明文长度相同的密文。密文将始终是模数的大小。因此,如果您使用的是RSA 2048,密文的长度将为256字节。没有办法把它缩短。这正是您对256字节的需求,但如果您还需要对其进行编码以实现传输的持久性,那么它

我试图在java中找到一种公钥加密方法,它将生成和原始字符串长度相同的字符串。通常的rsa不起作用。它为3个字符串生成一个非常长的字符串。我想为我的项目做的是用一个密钥加密一个字符串,然后用一个密钥再次加密它,但是有一个长字符串会大大减慢这个过程。有什么建议吗

RSA没有流密码模式,可以创建与明文长度相同的密文。密文将始终是模数的大小。因此,如果您使用的是RSA 2048,密文的长度将为256字节。没有办法把它缩短。这正是您对256字节的需求,但如果您还需要对其进行编码以实现传输的持久性,那么它将更大


您可以使用较短的RSA密钥,例如RSA 1536,它将产生192字节的密文,如果您使用Base 64编码,它将正好有256字节长。

据我所知,RSA没有流密码版本(您建议的不可能)。不是密文的长度减慢了这个过程,而是RSA本身。那么,您实际上更关心的是性能,而不是长度要求?更关心的是长度,因为有时会出现错误-数据不能超过256字节。使用较长的钥匙将大大降低速度。创建RSA算法的流密码版本是完全可以想象的,但它没有Java实现。获得如此长的字符串的原因是因为Java实现是一个分组密码。长字符串的优点是它掩盖了明文和密文之间的关系。@christopher,但是如何呢?如果我考虑使用CTR模式(一种从分组密码中生成流密码的常用方法),那么密码会立即被破解,因为计数器是用公钥加密的。@ArtjomB。隐马尔可夫模型。。这是一个很好的观点。我得多考虑一下,但没有立即的解决办法。我很高兴+1这个,直到我能想到反驳@克里斯托弗,我很期待。