Ara*_*d S 5 java cryptography rsa
有没有办法在java中验证给定的私钥,比如某些*.key文件是否与某个公钥匹配,使用RSA算法到某个.pub文件?
Pet*_*ser 11
您可以验证密钥对是否匹配
如果签名验证正常,这给予您足够高的置信度(几乎确定性),密钥对匹配,并且密钥对不确定的绝对确定性.
示例代码:
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);
Run Code Online (Sandbox Code Playgroud)
被标记为正确的答案浪费了大量的 CPU 周期。这个答案的 CPU 效率更高:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair keyPair = keyGen.generateKeyPair();
RSAPrivateCrtKey privateKey = (RSAPrivateCrtKey) keyPair.getPrivate();
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
// comment this out to verify the behavior when the keys are different
//keyPair = keyGen.generateKeyPair();
//publicKey = (RSAPublicKey) keyPair.getPublic();
boolean keyPairMatches = privateKey.getModulus().equals(publicKey.getModulus()) &&
privateKey.getPublicExponent().equals(publicKey.getPublicExponent());
Run Code Online (Sandbox Code Playgroud)
(另一个答案用私钥签署消息,然后用公钥验证它,而我的答案检查模数和公共指数是否相同)
| 归档时间: |
|
| 查看次数: |
3326 次 |
| 最近记录: |