在doFinal()中使用二进制数据 - javax.crypto.Cipher

时间:2011-03-23 16:20:14

标签: java binary rsa encryption

在我的项目中,我xor'ed(对不起但不知道正确的动词)字符串并用RSA-1024加密。现在我有一个 xored和加密字符串,如:

  

994624f87a00f4c3066c2a2d38917fe4971be8ad4e6ba58d14cc8b27ab8db84ec2a577f7bda1839cb9843ce6f738f51807ba127b775725ef14e3cea61091bf1fdcfa1372e1975f1b9418b0ad396bea5e7d2a832b8c4161e3b0595f7ed7e57eeda0ad8ab7a7268c871ab4e6d13e3caccaa8b54740ec2d1b8d23d835ff77c78161

当我尝试用...解密时

Cipher cipher2 = Cipher.getInstance("RSA");
cipher2.init(Cipher.DECRYPT_MODE, priKey);
byte[] cipherData = cipher2.doFinal(data);

它返回非逻辑字符,如

  

A- A- A- A- A- A- A- A - ????????

我知道原因;当具有正确的ascii对应物的位被xored时,答案可能没有ascii对应物。所以我试图找到一个不同的格式,如二进制在doFinal()内使用。

期待回答,

提前致谢。

1 个答案:

答案 0 :(得分:0)

你为什么要对明文进行异或?无论如何你要加密它,XORing似乎没有做任何事情。

除此之外cipherData是一个误导性的名称:这实际上是你的(XORd)明文,因为你是从解密步骤中得到的。

如果继续使用XOR方案,则需要在尝试将它们解码为String之前再次对这些字节进行异或。当您执行该步骤时,您可能需要指定所使用的编码,例如UTF-8,以确保安全。