ITPub博客

首页 > 应用开发 > > 为什么ECIES私钥加密 公钥解密就出错,但是公钥加密,私钥解密就正常

为什么ECIES私钥加密 公钥解密就出错,但是公钥加密,私钥解密就正常

作者:pheonix_wan 时间:2019-10-10 15:55:44 0 删除 编辑

//公钥加密 私钥解密

//初始化秘钥

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)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4484/viewspace-3124855/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-10-10

  • 博文量
    99
  • 访问量
    874