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

标签 java encryption encoding rsa

据我所知,RSA 加密的输出将等于 key 模数的长度(在本例中为 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 个字符的输出?

最佳答案

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

关于java - 如何从 RSA 1024 位加密中获得较短的输出(密文)结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23221785/

相关文章:

Javascript 无法运行 : Encoding error in Firefox

java - 如何从三个 long 生成哈希码

java - 如何将所有这些索引放入 char 数组?

CS50 Vigenere - 奇怪的图案

powershell - 在 New-WebServiceProxy 中包含德语变音的 PSCredential

Bash curl POST 二进制变量

java - 将随机图像设置为imageview android

java - 在 Java 中将不可打印字符打印为句号

Java - 堆与直接内存访问

encryption - 存储信用卡,这是使用信用卡保险库的替代方法