我正在尝试使用Java中的BouncyCastle使用ECC算法对某些内容进行加密。但是我对BouncyCastle库的说法例外:无法转换JCEECPublicKey为IESKey。我理解的是,所产生的公共密钥KeyPairGenerator是JCEECPublicKey不能在java的使用Cipher.init方法。有人可以告诉我如何将其转换为公钥或X509规范,以便可以将其用于加密。

这是我尝试过的代码

// add instance of provider class

Security.addProvider(new BouncyCastleProvider());

// initializing parameter specs secp256r1/prime192v1

ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime192v1");

// key pair generator to generate public and private key

KeyPairGenerator generator = KeyPairGenerator.getInstance("ECDH", new BouncyCastleProvider());

// initialize key pair generator

generator.initialize(ecSpec);

// Key pair to store public and private key

KeyPair keyPair = generator.generateKeyPair();

Cipher iesCipher = Cipher.getInstance("ECIES", new BouncyCastleProvider());

iesCipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());

我也尝试将公钥转换为X509EncodedSpec,但出现相同的异常

X509EncodedKeySpec spec = new X509EncodedKeySpec(keyPair.getPublic().getEncoded());

KeyFactory factory = KeyFactory.getInstance("ECDH");

PublicKey publicKey = factory.generatePublic(spec);

我得到的例外是

java.lang.ClassCastException: org.bouncycastle.jce.provider.JCEECPublicKey cannot be cast to org.bouncycastle.jce.interfaces.IESKey

at org.bouncycastle.jce.provider.JCEIESCipher.engineGetKeySize(JCEIESCipher.java:49)

at javax.crypto.Cipher.passCryptoPermCheck(Cipher.java:1057)

at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1015)

at javax.crypto.Cipher.init(Cipher.java:1229)

at javax.crypto.Cipher.init(Cipher.java:1173)

at com.test.EciesTest.main(EciesTest.java:45)

编辑

基于注释,我正在使用的JDK版本是JDK 7-我正在使用的Oracle Import语句:

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.Security;

import java.security.spec.ECGenParameterSpec;

import javax.crypto.Cipher;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

java bouncycastle,使用BouncyCastle在Java中使用ECIES进行加密相关推荐

  1. java bouncycastle_java – 使用bouncycastle进行签名和验证签名的正确方法

    我正在使用bcmail-jdk16-1.46.jar和bcprov-jdk16-1.46.jar(Bouncycastle库)来签名一个字符串,然后验证签名. 这是我的代码来签字符串: package ...

  2. Android+Java中使用Aes对称加密的工具类与使用

    场景 Android+Java中使用RSA加密实现接口调用时的校验功能: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11146 ...

  3. java基于http协议编程_Java中基于HTTP协议网络编程

    java中为我们的网络支持提供了java.net包,能够使我们以编程的方式来访问Web服务功能,这篇博客,就跟大家分享一下,Java中的网络编程的知识,主要是学习下该java.net包下的API. U ...

  4. java spring scope_如何在Spring中自定义scope的方法示例

    大家对于 Spring 的 scope 应该都不会默认.所谓 scope,字面理解就是"作用域"."范围",如果一个 bean 的 scope 配置为 sing ...

  5. java培训教程分享:Java中怎样将数据对象序列化和反序列化?

    本期为大家介绍的java培训教程是关于"Java中怎样将数据对象序列化和反序列化?"的内容,相信大家都知道,程序在运行过程中,可能需要将一些数据永久地保存到磁盘上,而数据在Java ...

  6. java培训教程分享:Java中用户如何自定义异常?

    我们在学习java技术的时候应该有了解过,在java中是定义了很多的异常类的,虽然这些大量异常类可以帮助我们描述编程时出现的大部分异常情况,但是在程序开发中有时可能需要描述程序中特有的异常情况,例如在 ...

  7. Java:new一个对象的过程中发生了什么?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:沉默哥 cnblogs.com/JackPn/p/93861 ...

  8. java单例模式的实现方法_Java中的五种单例模式实现方法

    Ext4 ComboBox组件使用 先来看例子: Ext.define('schoolModel', { extend: 'Ext.data.Model', fields: [{ name: 'id' ...

  9. java final 类_在Java中,final修饰的类有什么特点

    展开全部 关于Java中的32313133353236313431303231363533e4b893e5b19e31333264663736final(2010-09-09 14:19:48)转载▼ ...

  10. 【java】在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException...

    场景: 在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException 错误: java.lang ...

最新文章

  1. 端口聚合有哪几种方式?
  2. libevent之Reactor模式详解
  3. c字符串分割成数组_leetcode第31双周赛第三题leetcode1525. 字符串的好分割数目
  4. MySQL怎么存base64编码_MySQL中如何将字符串转为base64编码?
  5. x10i升级android4.0,智再升级 Xperia X10i升Android 2.3
  6. JavaScript初学者必看“new”
  7. (四)RabbitMQ消息队列-服务详细配置与日常监控管理
  8. javascript --- 异步工作流的动态排队技术
  9. vue限制点击次数_解决vue 按钮多次点击重复提交数据问题
  10. 分布式存储首选,浪潮商用机器FP5466G2服务器测评分析
  11. 基于JAVA+Swing+MYSQL的研究生科研信息管理系统
  12. Mac解压Linux平台tar包报错:tar: Error reading Truncated input file
  13. Unit06: 数组的常用方法_2 、 二维数组 、 String_1
  14. 使用http-server搭建web服务器
  15. win11右键新建没有txt文本文档记事本怎么办
  16. 怎么在国内创建谷歌账号_如何在Google相册中创建和共享协作相册
  17. Git上传项目提示Push rejected: Push to origin/master was rejected解决办法
  18. 通信天线建模与MATLAB仿真分析,通信天线建模与MATLAB仿真分析代码
  19. Mongodb被黑经历
  20. python 爬虫 短信验证码

热门文章

  1. Out of sort memory, consider increasing server sort buffer size
  2. 【JAVASE】泛型基础
  3. Mac sudo: no valid sudoers sources found, quitting
  4. 第一P2P收购中国典当联盟发力供应链金融模式
  5. JetBrains下载历史版本(IDEA、PyCharm、WebStorm、PhpStorm等)
  6. linux下swp文件
  7. linux 利用缓存文件.swp恢复源文件
  8. 逆袭-2014年中电投篮球赛札记_01【转】
  9. LeanCloud带图形校验码的短信发送Vue组件开发
  10. pysmiles:一个用于读写SMILES表达式的python库