Java RSA 密钥大小
Java RSA Key Sizes
我正在尝试学习如何在 Java 中使用 SHA256 的 RSA 算法对消息进行签名。当我生成一个2048位的KeyPair时,我发现public和私钥都是294字节。这是我查找键大小的代码:
import java.security.*;
public class RSATesting
{
public static void main(String[] args) throws Exception
{
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(2048, new SecureRandom());
KeyPair pair = generator.generateKeyPair();
byte[] publicKeyBytes=pair.getPublic().getEncoded();
System.out.println(publicKeyBytes.length);
byte[] privateKeyBytes=pair.getPublic().getEncoded();
System.out.println(privateKeyBytes.length);
}
}
为什么密钥不是 256 字节?
谢谢
RSA 密钥不同于 AES 密钥。
AES 密钥是一些随机字节。 RSA 密钥是数字。 RSA 模数 (N
) 定义长度。
你的密钥是 294 字节长,因为 getEncoded();
。它 returns 一个格式化的密钥而不是真正的长度。
我正在尝试学习如何在 Java 中使用 SHA256 的 RSA 算法对消息进行签名。当我生成一个2048位的KeyPair时,我发现public和私钥都是294字节。这是我查找键大小的代码:
import java.security.*;
public class RSATesting
{
public static void main(String[] args) throws Exception
{
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(2048, new SecureRandom());
KeyPair pair = generator.generateKeyPair();
byte[] publicKeyBytes=pair.getPublic().getEncoded();
System.out.println(publicKeyBytes.length);
byte[] privateKeyBytes=pair.getPublic().getEncoded();
System.out.println(privateKeyBytes.length);
}
}
为什么密钥不是 256 字节?
谢谢
RSA 密钥不同于 AES 密钥。
AES 密钥是一些随机字节。 RSA 密钥是数字。 RSA 模数 (N
) 定义长度。
你的密钥是 294 字节长,因为 getEncoded();
。它 returns 一个格式化的密钥而不是真正的长度。