RSA 算法根据公钥(私钥)文件路径获取私钥(公钥)值

最近做某某银行对接的时候需要用到 RSA 算法加签验签, 这里把用到的工具方法整理下


根据私钥文件路径读取私钥:

public static String getSignPrivateKey4Client(String keyPath){
      StringBuffer privateBuffer=new StringBuffer();
      try {
          //InputStream inputStream = Thread.currentThread().getContextClassLoader()
          //       .getResourceAsStream(signPrivatePath);
          FileInputStream fi=new FileInputStream(keyPath);
          InputStreamReader inputReader = new InputStreamReader(fi);
          BufferedReader bufferReader = new BufferedReader(inputReader);
          // 读取一行
          String line = "";
          while ((line=bufferReader.readLine())!=null) {
              privateBuffer.append(line);
          }
      } catch (Exception e) {
          e.printStackTrace();
      }
      return privateBuffer.toString();
  }



根据公钥文件路径读取公钥:

 public static String getVerifyKey4Client(String keyPath){
      String key="";
      try {
          CertificateFactory cf = CertificateFactory.getInstance("X.509");
          //InputStream in = Thread.currentThread().getContextClassLoader()
          //      .getResourceAsStream(signPublicPath);
          FileInputStream fi=new FileInputStream(keyPath);
          //生成一个证书对象并使用从输入流 inStream 中读取的数据对它进行初始化。
          Certificate c = cf.generateCertificate(fi);
          PublicKey publicKey = c.getPublicKey();
          key=new BASE64Encoder().encodeBuffer(publicKey.getEncoded());
      } catch (Exception e) {
          e.printStackTrace();
      }
      return key;
  }



json 数据转map

  public static Map<String, Object> parseJSON2Map(String jsonStr){
      Map<String, Object> map = new HashMap<String, Object>();
      //最外层解析
      JSONObject json = JSONObject.fromObject(jsonStr);
      for(Object k : json.keySet()){
          Object v = json.get(k);
          //如果内层还是数组的话,继续解析
          if(v instanceof JSONArray){
              List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
              Iterator<JSONObject> it = ((JSONArray)v).iterator();
              while(it.hasNext()){
                  JSONObject json2 = it.next();
                  list.add(parseJSON2Map(json2.toString()));
              }
              map.put(k.toString(), list);
          } else {
              map.put(k.toString(), v);
          }
      }
      return map;
  }



未完.................


要使用OpenSSL生成RSA公钥私钥,可以按照以下步骤进行操作: 1. 生成私钥: 使用以下命令生成带密码的RSA私钥: ``` openssl genrsa -aes128 -passout pass:foobar -out private_key.pem 2048 ``` 这将生成一个带密码的私钥文件private_key.pem,密码是"foobar"。\[1\] 2. 解密私钥: 如果需要解密私钥文件,可以使用以下命令: ``` openssl rsa -in private_key.pem -passin pass:foobar -out private_key_unencrypted.pem ``` 这将生成一个不带密码的私钥文件private_key_unencrypted.pem,密码是"foobar"。\[1\] 3. 生成公钥: 使用以下命令从私钥文件提取公钥: ``` openssl rsa -in private_key.pem -passin pass:foobar -pubout -out public_key.pub ``` 这将从私钥文件提取公钥,并将其保存到public_key.pub文件中。\[1\] 请注意,上述命令中的密码和文件名可以根据需要进行修改。 #### 引用[.reference_title] - *1* [Windows生成RSA公钥私钥](https://blog.csdn.net/qq_36306693/article/details/126821529)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [(4) openssl rsa/pkey(查看私钥、从私钥提取公钥、查看公钥)](https://blog.csdn.net/weixin_30872337/article/details/96641145)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值