//公钥加密 私钥解密
//初始化秘钥
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)
添加回答
举报
0/150
提交
取消