wil*_*lth 3 java cryptography rsa
这可能是一个新手问题.我正在使用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();
Run Code Online (Sandbox Code Playgroud)
现在我一直认为privateKey.getModulus()和privateKey.getPrivateExponent()形成"私钥",并且它们与传递给密钥生成器的密钥大小(512位)一样大.
但是,privateKey.getPrivateExponent().toByteArray()有时返回64字节(如我所料),有时是65字节数组.
为什么有时65字节?我在这里错过了什么吗?
jar*_*bjo 10
getPrivateExponent()返回一个BigInteger,toByteArray()方法返回一个字节数组,该数组总是包含一个符号位.如果设置了512位指数中的最高有效位,BigInteger将添加额外的第513个0位以指定该数字为正,而不是511位负数,并将第512位设置为1.对于513位,65个字节是编码所需.
如果查看返回的字节数组的内容,如果得到65个元素数组,则第一个字节将始终为0.