小编Chr*_*bel的帖子

Bouncy Castle ECC 密钥对生成为 EC 公钥点的坐标生成不同大小的值

我正在使用 Bouncy Castle 生成 ECC 密钥对:

KeyPairGenerator kpg = null;
try {
    kpg = KeyPairGenerator.getInstance("ECDH", BouncyCastleProvider.PROVIDER_NAME);
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
    throw new CustomException("Exception: " + e.getMessage());
}

try {
    kpg.initialize(paramSpec, new SecureRandom());
} catch (InvalidAlgorithmParameterException e) {
    throw new CustomException("Exception: " + e.getMessage());
}

return kpg.generateKeyPair();
Run Code Online (Sandbox Code Playgroud)

的类型paramSpec来自ECParameterSpec. java.security.spec我在用着brainpoolP256r1

效果很好。然后我想将密钥对中的公钥值(来自 EC 公共点的 X 和 Y 坐标)转换为八位字节字符串。

为此,我使用BigInteger.toByteArray()函数。

我的问题和我想要理解的是为什么坐标的大小并不总是相同?

每个坐标应为 32 字节。但有时,我会得到 31 字节或 33 字节。toByteArray()据我所知,它与返回一个包含此 BigInteger 的补码表示的 …

java compression cryptography bouncycastle elliptic-curve

3
推荐指数
1
解决办法
2434
查看次数