英文:
Native Method Error in KeyAgreement.generateSecret()
问题
我正在尝试使用javax.crypto.KeyAgreement生成共享密钥:
public static byte[] generateSharedSecret(KeyPair localKeyPair, PublicKey clientPublicKey) {
byte[] sharedSecret = {};
try {
KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH");
keyAgreement.init(localKeyPair.getPrivate());
keyAgreement.doPhase(clientPublicKey, true);
sharedSecret = keyAgreement.generateSecret();
MessageDigest hash = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return sharedSecret;
}
但在运行程序后,我遇到了以下错误:
Exception in thread "main" java.lang.IllegalStateException
at sun.security.ec.ECDHKeyAgreement.deriveKey(Native Method)
at sun.security.ec.ECDHKeyAgreement.engineGenerateSecret(ECDHKeyAgreement.java:130)
at javax.crypto.KeyAgreement.generateSecret(KeyAgreement.java:586)
at io.softitecture.jpushup.keygen.ECDHKeyGenerator.generateSharedSecret(ECDHKeyGenerator.java:47)
at io.softitecture.jpushup.payload.PayloadEncryptor.encrypt(PayloadEncryptor.java:19)
at io.softitecture.App.main(App.java:15)
请您帮我查找问题所在并告诉我我哪里出错了?
英文:
I'm trying to generate a shared secret with javax.crypto.KeyAgreement:
public static byte[] generateSharedSecret(KeyPair localKeyPair, PublicKey clientPublicKey) {
byte[] sharedSecret = {};
try {
KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH");
keyAgreement.init(localKeyPair.getPrivate());
keyAgreement.doPhase(clientPublicKey, true);
sharedSecret = keyAgreement.generateSecret();
MessageDigest hash = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return sharedSecret;
}
but after running the program I give this error:
Exception in thread "main" java.lang.IllegalStateException
at sun.security.ec.ECDHKeyAgreement.deriveKey(Native Method)
at sun.security.ec.ECDHKeyAgreement.engineGenerateSecret(ECDHKeyAgreement.java:130)
at javax.crypto.KeyAgreement.generateSecret(KeyAgreement.java:586)
at io.softitecture.jpushup.keygen.ECDHKeyGenerator.generateSharedSecret(ECDHKeyGenerator.java:47)
at io.softitecture.jpushup.payload.PayloadEncryptor.encrypt(PayloadEncryptor.java:19)
at io.softitecture.App.main(App.java:15)
would you please help me out with this and tell me where I went wrong?
专注分享java语言的经验与见解,让所有开发者获益!
评论