如何从Java中的BigInteger获取无符号字节数组?

时间:2016-09-03 06:15:15

标签: java biginteger unsigned-integer unsigned-char

我需要将BigInteger转换为以big-endian格式编码的无符号整数,但由于BigInteger.toByteArray返回已签名的表示,因此我遇到了问题。如何将此值转换为无符号格式?

(相对)有用的背景

我正在研究一些使用JNI让c ++调用一些Java方法来处理某些加密功能的代码(这是一个将一些功能卸载到Java的Microsoft CNG提供程序)。我有Java中的公钥,我需要转换的BigInteger值是coordinates of the Elliptic Curve Public Key。根据{{​​3}},我需要提供这些点作为"以大端格式编码的无符号整数"。

修改

事后来看,这可能是一个愚蠢的帖子。我对消极和积极的数字以及如何处理这个问题感到困惑(因为它已经很晚了,我的思绪已经变得糊涂了)但事实证明,自从{我不需要处理这个问题以来{3}}。谢谢大家在这里回复!我会把它留下来,以防它帮助其他人。

1 个答案:

答案 0 :(得分:1)

借助2的补码参考值,我们可以像下面这样做

private static final BigInteger TWO_COMPL_REF = BigInteger.ONE.shiftLeft(64);

    public static byte[] parseBigIntegerPositive(BigInteger b) {
        if (b.compareTo(BigInteger.ZERO) < 0)
            b = b.add(TWO_COMPL_REF);

       byte[] unsignedbyteArray= b.toByteArray();
        return unsignedbyteArray;
    }