据我所知,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 个字符的唯一方法是将每个字节视为一个字符。在这种情况下,您必须允许超出可打印范围的字符,因此您必须允许 0x20
和 7F
以下的所有字符。您可以通过使用 C/C++ 字符数组(char*
或 char[]
)并存储长度来获得此值,因为 C 不区分字符和字节。所以从这个意义上说,这可能只是语言上的困惑。
关于java - 如何从 RSA 1024 位加密中获得较短的输出(密文)结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23221785/