Java验证公私密钥对

时间:2021-12-09 16:37:27

验证过程:

  1. 创建一个足够长的随机字节数,称为challenge
  2. 使用密钥签名challenge
  3. 使用公钥验证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。