gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:22:26 27 4
gpt4 key购买 nike

在我的项目中,我异或(抱歉,但不知道正确的动词)字符串并使用 RSA-1024 加密。现在我有了一个xored 和加密 字符串,例如:

994624f87a00f4c3066c2a2d38917fe4971be8ad4e6ba58d14cc8b27ab8db84ec2a577f7bda1839cb9843ce6f738f51807ba127b775725ef14e3cea61091bf1fdcfa1372e1975f1b9418b0ad396bea5e7d2a832b8c4161e3b0595f7ed7e57eeda0ad8ab7a7268c871ab4e6d13e3caccaa8b54740ec2d1b8d23d835ff77c78161

当我尝试用...解密时

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

它返回非逻辑字符,如

â—?â—?â—?â—?â—?â—?â—?â—?

我知道原因;当对具有适当 ascii 对应项的位进行异或时,答案可能没有 ascii 对应项。所以我试图找到一种不同的格式,例如在 doFinal() 中使用的二进制格式。

期待答案

提前致谢。

最佳答案

为什么要对明文进行异或运算?如果您无论如何都要对其进行加密,那么 XORing 似乎无法完成任何事情。

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

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

关于java - 在 doFinal() 中使用二进制数据 - javax.crypto.Cipher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5408396/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com