验证过程:
- 创建一个足够长的随机字节数,称为challenge
- 使用密钥签名challenge
- 使用公钥验证challenge
示例代码:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); //密钥生成器
keyGen.initialize(2048);
KeyPair keyPair = keyGen.generateKeyPair(); //密钥对
PublicKey publicKey = keyPair.getPublic(); //公钥
PrivateKey privateKey = keyPair.getPrivate(); //私钥
//创建challenge
byte[] challenge = new byte[10000];
ThreadLocalRandom.current().nextBytes(challenge);
// 使用私钥签名challenge
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initSign(privateKey);
sig.update(challenge);
byte[] signature = sig.sign();
// 使用公钥验证challenge
sig.initVerify(publicKey);
sig.update(challenge);
boolean keyPairMatches = sig.verify(signature);
如果公私密钥对匹配,keyPairMatches返回true。