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

这可能是一个新手问题.我正在使用Java生成密钥对:

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()形成“私钥”,并且它们与传递给密钥生成器的密钥大小(512位)一样大.

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

为什么有时65字节?我在这里错过了什么吗?

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

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

转载注明原文:Java:为什么512位RSA KeyPairGenerator返回65字节密钥? - 代码日志