我正在编写一些 Junit 测试,其中生成了许多 java.security.KeyPair 类型的对象(来自 java.security.KeyPairGenerator)
我正在添加一些断言以确认这些 KeyPair 中包含的密钥具有预期的属性(预期的算法和预期的大小)。
例如,我添加了一个断言语句来确认该算法是预期的算法,使用:
String expectedAlgorithm = "RSA";
String errorMsg = "The key is not of the expected algorithm";
assertEquals(errorMsg, expectedAlgorithm, privateKey.getAlgorithm());
我试图在 KeyPair 或 Keys 本身中找到一些返回密钥大小(位数)的方法,但我找不到这样的方法。
我检查了键的 toString() 方法的输出,以查看该字符串是否包含键的大小,使用:
String stringRepresentation = publicKey.toString();
我发现对于 SunRsaSign 提供程序,该字符串包含其第一行中的位数(因此可以通过解析此字符串来确认密钥大小。但是当我检查 Bouncy Castle 的相同方法时,我发现字符串不包含位数,如下图:
来自 RsaSunSign 提供程序的密钥上的 toString() 输出:
Sun RSA public key, 1024 bits
modulus: 10827493886854...
public exponent: 65537
来自 Bouncy Castle Provider 的键上的 toString() 输出:
RSA Public Key
modulus: 830d0eb805c527e8...
public exponent: 10001
因此,使用密钥的字符串表示形式的输出来确认其大小显然是不安全的,因为我们不知道将使用哪个提供程序。
所以我的问题是:给定一个 KeyPair(并且还给出了用于生成该 KeyPair 的 KeyPairGenerator),是否有提供者中立的方法来确认 KeyPair 中密钥的大小?