gpt4 book ai didi

Java:为什么 512 位 RSA KeyPairGenerator 返回 65 字节 key ?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:43:49 27 4
gpt4 key购买 nike

这可能是一个新手问题。我正在用 Java 生成 key 对:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(512, random);

KeyPair keyPair = keyGen.genKeyPair();

RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate();

现在我一直认为 privateKey.getModulus() 和 privateKey.getPrivateExponent() 形成“私钥”,并且它们与传递给 key 生成器的 key 大小(512 位)一样大。

但是,privateKey.getPrivateExponent().toByteArray() 有时返回一个 64 字节的数组(如我所料),有时返回一个 65 字节的数组。

为什么有时是 65 字节?我在这里遗漏了什么吗?

最佳答案

getPrivateExponent() 返回一个 BigInteger,toByteArray() 方法返回一个字节数组,它总是包含一个符号位。如果设置了 512 位指数中的最高有效位,BigInteger 将添加一个额外的第 513 个 0 位以指定该数字是正数而不是第 512 位设置为 1 的 511 位负数。对于 513 位,65 个字节是编码所需。

如果您查看返回的字节数组的内容,如果您得到一个包含 65 个元素的数组,第一个字节将始终为 0。

关于Java:为什么 512 位 RSA KeyPairGenerator 返回 65 字节 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1571999/

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