有没有一种方法可以在 java 中验证给定的私钥(例如某个 *.key 文件)是否与某个使用 RSA 算法的某个 .pub 文件匹配的公钥?
您可以通过以下方式验证密钥对是否匹配
- 创建一个挑战(足够长度的随机字节序列)
-
signing的挑战私钥
-
验证签名使用公钥
如果签名验证正确,这将为您提供足够高的置信度(几乎确定)密钥对匹配,否则绝对确定密钥对不匹配。
示例代码:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair keyPair = keyGen.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// create a challenge
byte[] challenge = new byte[10000];
ThreadLocalRandom.current().nextBytes(challenge);
// sign using the private key
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initSign(privateKey);
sig.update(challenge);
byte[] signature = sig.sign();
// verify signature using the public key
sig.initVerify(publicKey);
sig.update(challenge);
boolean keyPairMatches = sig.verify(signature);
这也适用于椭圆曲线 (EC)密钥对,但您需要使用不同的签名算法(SHA256withECDSA
):
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
keyGen.initialize(new ECGenParameterSpec("sect571k1"));
...
Signature sig = Signature.getInstance("SHA256withECDSA");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)