开发中得到密钥文件,需要将密钥获取出来,转为String,然后存储在数据库中,后又需要获取然后转为PublicKey/PrivateKey使用,以下是针对一种农行公钥私钥类型的密钥做转换,不一定通用其他,因为还没试过

获取.cer公钥文件并读取

 /********************************** @Description  获取.cer公钥文件并读取* @MethodName   readPublicKey* @param        file* @return       java.lang.String* @Author       fancw* @Date         2019/1/4  9:30********************************/private static String readPublicKey(File file) {String publicKeyString = null;// 从指定流中获取数据并生成证书X509Certificate cert = null;try {CertificateFactory cf = CertificateFactory.getInstance("X.509");cert = (X509Certificate) cf.generateCertificate(new FileInputStream(file));PublicKey publicKey = cert.getPublicKey();System.out.println("-----------------获取的公钥--------------------");System.out.println(publicKey);publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));System.out.println("-----------------Base64encode后的公钥--------------------");System.out.println(publicKeyString);} catch (CertificateException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();}return publicKeyString;}

获取.pfx文件并读取

 /********************************** @Description  获取.pfx文件并读取* @MethodName   readMerchantKey* @param        map* @param        file* @param        keystorePassword* @return       java.util.HashMap<java.lang.String,java.lang.String>* @Author       fancw* @Date         2019/1/4  9:32********************************/private static HashMap<String, String> readMerchantKey(HashMap<String, String> map, File file, String keystorePassword) {try {KeyStore ks = KeyStore.getInstance("PKCS12");FileInputStream fis = new FileInputStream(file);char[] nPassword = null;if (StringUtil.isEmpty(keystorePassword)) {nPassword = null;} else {nPassword = keystorePassword.toCharArray();}// 从指定输入流中加载 KeyStoreks.load(fis, nPassword);fis.close();System.out.println("keystore type=" + ks.getType());// 获取密钥库的所有别名Enumeration<String> enums = ks.aliases();String keyAlias = null;// 测试此枚举是否包含更多的元素if (enums.hasMoreElements()){// 如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素keyAlias = (String) enums.nextElement();System.out.println("alias=[" + keyAlias + "]");}// 判断给定别名是否通过调用 setKeyEntry//  或者以 privateKeyEntry 或 SecretKeyEntry 为参数 setEntry 创建的System.out.println("is key entry=" + ks.isKeyEntry(keyAlias));// 获取和别名绑定的密钥,并用给定密码来恢复它PrivateKey prikey = (PrivateKey) ks.getKey(keyAlias, nPassword);// 获取和别名绑定的证书// Certificate / 管理各种身份证书// 身份证书是一个主体与由另一个主体所担保的公钥之间的绑定关系java.security.cert.Certificate cert = ks.getCertificate(keyAlias);// 从证书中获取公钥PublicKey pubkey = cert.getPublicKey();// 获取证书名
//            System.out.println("cert class = " + cert.getClass().getName());
//            System.out.println("cert = " + cert);
//            System.out.println("public key = " + pubkey);
//            System.out.println("private key = " + prikey);System.out.println("-----------------公钥--------------------");String pubkeyKeyStr = new String(Base64.encodeBase64(pubkey.getEncoded()));System.out.println(pubkeyKeyStr);System.out.println("-----------------公钥--------------------");System.out.println("-----------------私钥--------------------");String privateKeyStr = new String(Base64.encodeBase64(prikey.getEncoded()));System.out.println(privateKeyStr);System.out.println("-----------------私钥--------------------");map.put("密钥【" + file.getName() + "】 - 公钥", pubkeyKeyStr);map.put("密钥【" + file.getName() + "】 - 私钥", privateKeyStr);map.put("密钥【" + file.getName() + "】 - 密码", keystorePassword);} catch (KeyStoreException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (CertificateException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (UnrecoverableKeyException e) {e.printStackTrace();}return map;}

将数据库中读取的str公钥转为 PublicKey

 /********************************** @Description  将数据库中读取的str公钥转为 PublicKey* @MethodName   test* @param        publicKeyString* @return       java.security.PublicKey* @Author       fancw* @Date         2019/1/3  9:34********************************/private static PublicKey strToPublicKey(String publicKeyString) {PublicKey publicKey = null;try {java.security.spec.X509EncodedKeySpec bobPubKeySpec = new java.security.spec.X509EncodedKeySpec(new BASE64Decoder().decodeBuffer(publicKeyString));java.security.KeyFactory keyFactory = java.security.KeyFactory.getInstance("RSA");// 取公钥匙对象publicKey = keyFactory.generatePublic(bobPubKeySpec);} catch (InvalidKeySpecException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return publicKey;}

将数据库中读取的str私钥转为 PrivateKey

 /********************************** @Description  将数据库中读取的str私钥转为 PrivateKey* @MethodName   strToPrivateKey* @param        privateKeyString* @return       java.security.PrivateKey* @Author       fancw* @Date         2019/1/3  11:24********************************/private static PrivateKey strToPrivateKey(String privateKeyString) {PrivateKey privateKey = null;try {byte[] keyBytes = new byte[0];keyBytes = (new BASE64Decoder()).decodeBuffer(privateKeyString);PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes);// 指定加密算法KeyFactory keyFactory = KeyFactory.getInstance("RSA");// 取私钥匙对象privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);} catch (InvalidKeySpecException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return privateKey;}

避免方法乱用,目前也只是适用于项目某特殊位置,所以方法全为 private

密钥文件读取保存为String,并转PublicKey/PrivateKey相关推荐

  1. Matlab常用函数集合(各类文件读取/保存、数据转换、处理)——持续更新中

    目录 一.各类文件读取.显示.保存 0.文件/文件夹 0.1.判断文件是否存在 1.图像文件 1.1.图片读取 1.2.图片显示 1.3.图片保存 2.音频文件 2.1 音频文件读取 2.2 音频文件 ...

  2. python程序保存_初识python 文件读取 保存

    上一章最后一题的答案: infors.sort(key=lambda x:x['age']) print(infors) --->[{'name': 'laowang', 'age': 23}, ...

  3. 点云文件的.dat文件读取保存

    c++存取dat数据_破晓前的彷徨的博客-CSDN博客_c语言数据存储到dat文件 二进制binary和Ascii ASCII 模式和 Binary 模式的区别是换行符的处理,Binary 模式不对数 ...

  4. ssh服务器拒绝证书,使用SSH.NET以密钥文件连接到SFTP(权限被拒绝(publickey))...

    我在Visual Studio 2008和.NET Framework 3.5中有一个C#控制台应用程序.使用SSH.NET以密钥文件连接到SFTP(权限被拒绝(publickey)) 为了测试目的, ...

  5. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  6. Spark的RDD 文件读取与保存

    RDD 文件读取与保存 Spark 的数据读取及数据保存可以从两个维度来作区分:文件格式以及文件系统.其中: (1)文件格式分为:text 文件.csv 文件.sequence 文件以及Object ...

  7. 实例教程三:文件的保存与读取

    使用代码嵌入android.os.SystemProperties的方法(转) http://www.eoeandroid.com/thread-206961-1-1.html Android网络连接 ...

  8. java文件读取与保存

    文件读取与保存 Long startTime=System.currentTimeMillis();String jsonStr = "";try {File jsonFile = ...

  9. C++按列读取txt文件并保存,替代excel处理

    C++按列读取txt文件并保存,替代excel处理 问题描述 原内容为txt格式,每行数据以"逗号"为分割. 目标为提取其中4.5列,单独以"空格"为分割存储到 ...

最新文章

  1. 计算机组成原理设计一个Isa,计算机组成原理
  2. centos6 yum源不能使用
  3. FMS(Flash Media Server)共享内存问题解决
  4. Python 个人的失误记录之str.replace
  5. LInux命令随笔记
  6. 鸿蒙系统有无隐私空间,华为鸿蒙OS系统有隐私空间功能吗 华为p40使用鸿蒙系统体验评测...
  7. python安装界面翻译_python环境搭建
  8. HDU 2242 考研路茫茫——空调教室
  9. 难道早上起床后就一定要喝一杯白开水吗?
  10. 微信跳转浏览器--使用AugPush实现微信跳转手机浏览器
  11. 引用 一个较优雅的GridView隐藏列取值解决方案
  12. listview 刷新某一个item
  13. 计算机辅助设计和计算机动画,计算机辅助设计与制造(第2版)
  14. 360P2建html网站,如何自己建网站
  15. uva 11584 dp
  16. 老有“美女”加你微信?大学生“艳遇”,结果吓一跳...
  17. 区块链技术工坊 - 线下区块链技术分享
  18. Apache服务部署静态网站——个人用户主页
  19. 2小时速刷8大项目——上海迪士尼一日游攻略
  20. 2022年YouTube营销:5个推荐的数据分析工具

热门文章

  1. js 获取当前日期,计算往后三个月的日期
  2. uniapp框架+app打包发布
  3. 推荐几个非常刺激的公众号
  4. 数学建模超细致讲解,从建立模型到论文写作
  5. 写任务,列清单-4D工作法
  6. MLY -- 7.How large do the dev/test sets need to be?
  7. 机器学习 AI 谷歌ML Kit 与苹果Core ML
  8. 马云控股“文化中国”暗藏啥玄机?
  9. arduino 休眠 节能_用 Arduino 自制应急感应灯,给黑夜带来一点光明。
  10. Android游戏开发---碰撞检测