如何从RSA 1024位加密获得较短的输出(密文)结果?

时间:2014-04-22 14:01:51

标签: java encryption encoding rsa

据我所知,RSA加密的输出将等于密钥模数的长度(在这种情况下为128字节)。我的RSA加密代码是:

public byte [] RSAEncrypter () throws Exception {
  byte[] inBytes = textfield1.getString().getBytes(); 
  if (newRSApubKey == null){
    throw new Exception("Generate RSA keys first!");
  }
  AsymmetricBlockCipher eng = new RSAEngine();
  eng = new PKCS1Encoding(eng);
  eng.init(true, newRSApubKey);
  return eng.processBlock(inBytes, 0, inBytes.length);
}    

我使用十六进制编码处理结果输出,以获得256个字符,如下所示;

textfield2.setString(new String(hex.encode(eng.processBlock(inBytes, 0, 
inBytes.length))));

我使用base64编码处理相同的输出,以获得172个字符,如下所示;

textfield3.setString(new String(Base64.encode(eng.processBlock(inBytes, 0,
inBytes.length))));

但是,我看到了一个PDF here,其中作者能够获得128个字符;即使他们没有提到这是如何达成的。请问,我认为这是使用编码(对吗?)的结果。我有什么编码替代方案?或者我该如何处理这行代码以实现至少128个字符的输出?

1 个答案:

答案 0 :(得分:1)

获得128个字符的唯一方法是将每个字节视为一个字符。在这种情况下,您必须允许超出可打印范围的字符,因此您必须允许0x207F以下的所有内容。您可以通过使用C / C ++字符数组(char*char[])并存储长度来实现此目的,因为C不会在字符和字节之间分开。所以从这个意义上来说,它可能只是一种语言混乱。