【问题标题】:how to convert a BigInteger into a string of ascii如何将 BigInteger 转换为 ascii 字符串
【发布时间】:2013-04-16 05:47:52
【问题描述】:

正在寻找一些关于如何将大整数值转换为 ascii 字符字符串的帮助;

在使用 RSA 加密/解密完成一些工作后,我将这个 140472961968666030223 解密为消息,现在我需要将其转换为一串 ascii 字符。我找到了这种将一串 ascii 字符转换为大整数的方法,但我一生都无法弄清楚如何反转该方法。

注意:对于 8 个字符的块,结果整数也可以通过以下方式计算:

R= c7 * 2567 + c6 * 2566 + c5 * 2565 + c4 * 2564 + c3 * 2563 + c2 * 2562 + c1 * 256 + c0 * 1

所以我可以看到如果你知道那些字符或其他东西很容易撤消,但在这种情况下,我只有那个 BigInteger,我怎么知道要取出什么(比如什么块)以及在哪里他们走了?)

如果有人有更好的方法,请拍摄,因为这不是很有希望!

谢谢!

【问题讨论】:

  • 加密的结果通常是byte[],而不是BigInteger。你在滚动你自己的加密代码吗?这几乎总是一个坏主意。
  • 好吧,我得到了一个大整数作为密文,所以在使用 rsa 解密后,它类似于 Code^Private key mod n ;;是的,这给了我另一个整数
  • 所以 byte[] 被加密的事实并不重要,您只想知道如何将 byte[] 转换为 BigInteger 以及执行此操作的构造函数对您不起作用?
  • 使用 RSA 时,您需要使用适当的填充方案。 PKCS #1 定义了这样的方案(特别是 OAEP),它还定义了如何在字节和大整数之间进行转换。而且您不应该将普通的 BigInteger 类用于私钥操作。这打开了巨大的侧通道,允许攻击者测量您的解密需要多长时间才能恢复您的私钥。

标签: java encryption integer rsa


【解决方案1】:

如果 R 是 BigInteger,您可以按如下方式恢复 c 数组:

byte [] c = new byte[8];
for (int i=0; i<c.length; i++) {
    c[i] = R.byteValue();
    R = R.shiftRight(8);
}

【讨论】:

    猜你喜欢
    • 2017-04-15
    • 2013-03-20
    • 2012-12-20
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多