//公鑰加密?私鑰解密
//初始化秘鑰
try?{
????KeyPairGenerator?kp=KeyPairGenerator.getInstance("EC","BC");
????kp.initialize(256,new?SecureRandom());
????KeyPair?keyPair=kp.generateKeyPair();
????ECPublicKey?ecPubKey=(ECPublicKey)keyPair.getPublic();
????ECPrivateKey?ecPriKey=(ECPrivateKey)keyPair.getPrivate();
????System.out.println("公鑰:"+?Base64.encodeBase64String(ecPubKey.getEncoded()));
????System.out.println("私鑰:"+?Base64.encodeBase64String(ecPriKey.getEncoded()));
????//私鑰加密,公鑰解密:加密
????PKCS8EncodedKeySpec?peks=new?PKCS8EncodedKeySpec(ecPriKey.getEncoded());
????KeyFactory?keyFactory=KeyFactory.getInstance("EC");
????PrivateKey?priKey=keyFactory.generatePrivate(peks);
????Cipher?cipher=Cipher.getInstance("ECIES","BC");
????cipher.init(Cipher.ENCRYPT_MODE,priKey);
????byte[]?result=cipher.doFinal("hello".getBytes());
????System.out.println("私鑰加密,公鑰解密:加密-----"+Base64.encodeBase64String(result));
????//私鑰加密,公鑰解密:解密
????X509EncodedKeySpec?x509=new?X509EncodedKeySpec(ecPubKey.getEncoded());
????keyFactory=KeyFactory.getInstance("EC");
????PublicKey?pubKey=keyFactory.generatePublic(x509);
????cipher=Cipher.getInstance("ECIES","BC");
????cipher.init(Cipher.DECRYPT_MODE,pubKey);
????result=cipher.doFinal(result);
????System.out.println("私鑰加密,公鑰解密:解密"+new?String(result));
}
catch?(NoSuchAlgorithmException?e)?{
????e.printStackTrace();
}?catch?(NoSuchProviderException?e)?{
????e.printStackTrace();
}?catch?(InvalidKeySpecException?e)?{
????e.printStackTrace();
}?catch?(NoSuchPaddingException?e)?{
????e.printStackTrace();
}?catch?(InvalidKeyException?e)?{
????e.printStackTrace();
}?catch?(BadPaddingException?e)?{
????e.printStackTrace();
}?catch?(IllegalBlockSizeException?e)?{
????e.printStackTrace();
}
異常信息??java.security.InvalidKeyException:?must?be?passed?recipient's?public?EC?key?for?encryption at?org.bouncycastle.jcajce.provider.asymmetric.ec.IESCipher.engineInit(Unknown?Source) at?org.bouncycastle.jcajce.provider.asymmetric.ec.IESCipher.engineInit(Unknown?Source) at?java.base/javax.crypto.Cipher.init(Cipher.java:1283) at?java.base/javax.crypto.Cipher.init(Cipher.java:1223)
為什么ECIES私鑰加密 公鑰解密就出錯,但是公鑰加密,私鑰解密就正常
一人我編程累
2019-05-08 20:19:22