这可能是一个新手问题。我正在用 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/