尝试这个类。package groovy;

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.security.GeneralSecurityException;

import java.security.InvalidKeyException;

import java.security.KeyFactory;

import java.security.NoSuchAlgorithmException;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.Signature;

import java.security.SignatureException;

import java.security.interfaces.RSAPrivateKey;

import java.security.interfaces.RSAPublicKey;

import java.security.spec.PKCS8EncodedKeySpec;

import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

import org.apache.commons.codec.binary.Base64;

public class RSA {

private static String getKey(String filename) throws IOException {

// Read key from file

String strKeyPEM ="";

BufferedReader br = new BufferedReader(new FileReader(filename));

String line;

while ((line = br.readLine()) != null) {

strKeyPEM += line +"n";

}

br.close();

return strKeyPEM;

}

public static RSAPrivateKey getPrivateKey(String filename) throws IOException, GeneralSecurityException {

String privateKeyPEM = getKey(filename);

return getPrivateKeyFromString(privateKeyPEM);

}

public static RSAPrivateKey getPrivateKeyFromString(String key) throws IOException, GeneralSecurityException {

String privateKeyPEM = key;

privateKeyPEM = privateKeyPEM.replace("-----BEGIN PRIVATE KEY-----n","");

privateKeyPEM = privateKeyPEM.replace("-----END PRIVATE KEY-----","");

byte[] encoded = Base64.decodeBase64(privateKeyPEM);

KeyFactory kf = KeyFactory.getInstance("RSA");

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);

RSAPrivateKey privKey = (RSAPrivateKey) kf.generatePrivate(keySpec);

return privKey;

}

public static RSAPublicKey getPublicKey(String filename) throws IOException, GeneralSecurityException {

String publicKeyPEM = getKey(filename);

return getPublicKeyFromString(publicKeyPEM);

}

public static RSAPublicKey getPublicKeyFromString(String key) throws IOException, GeneralSecurityException {

String publicKeyPEM = key;

publicKeyPEM = publicKeyPEM.replace("-----BEGIN PUBLIC KEY-----n","");

publicKeyPEM = publicKeyPEM.replace("-----END PUBLIC KEY-----","");

byte[] encoded = Base64.decodeBase64(publicKeyPEM);

KeyFactory kf = KeyFactory.getInstance("RSA");

RSAPublicKey pubKey = (RSAPublicKey) kf.generatePublic(new PKCS8EncodedKeySpec(encoded));

return pubKey;

}

public static String sign(PrivateKey privateKey, String message) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException, UnsupportedEncodingException {

Signature sign = Signature.getInstance("SHA1withRSA");

sign.initSign(privateKey);

sign.update(message.getBytes("UTF-8"));

return new String(Base64.encodeBase64(sign.sign()),"UTF-8");

}

public static boolean verify(PublicKey publicKey, String message, String signature) throws SignatureException, NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {

Signature sign = Signature.getInstance("SHA1withRSA");

sign.initVerify(publicKey);

sign.update(message.getBytes("UTF-8"));

return sign.verify(Base64.decodeBase64(signature.getBytes("UTF-8")));

}

public static String encrypt(String rawText, PublicKey publicKey) throws IOException, GeneralSecurityException {

Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.ENCRYPT_MODE, publicKey);

return Base64.encodeBase64String(cipher.doFinal(rawText.getBytes("UTF-8")));

}

public static String decrypt(String cipherText, PrivateKey privateKey) throws IOException, GeneralSecurityException {

Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.DECRYPT_MODE, privateKey);

return new String(cipher.doFinal(Base64.decodeBase64(cipherText)),"UTF-8");

}

}

所需的jar库"common-codec-1.6 "

java怎么读取pem文件格式_如何读取. pem 文件获得私钥和公钥_java_酷徒编程知识库...相关推荐

  1. java 一年 周数_在java,如何找到一年的总周数?_java_酷徒编程知识库

    我得到错误的答案,2020有53周,但是这段代码给出52周,请给我一个建议,package com.hib.mapping; import java.time.LocalDate; import ja ...

  2. return true Java方法_java - 如何检查方法是否返回true或false?_java_酷徒编程知识库...

    在Java中,if语句检查它操作数是true还是false,操作数只能是booleanboolean b = true; if (b) { System.out.println("b was ...

  3. java selenium 日志_java - 支持selenium日志_java_酷徒编程知识库

    在自動測試中,Chrome創建了大量日誌,System.setProperty("webdriver.chrome.silentOutput","true"); ...

  4. java如何恢复视图_Java - 如何用reformation+Moshi创建回收站视图_java_酷徒编程知识库...

    在OrderHistoryActivity Activity中,在XML中使用RecyclerView并在OrderHistoryActivity.java中创建对象. 创建item.xml文件 注: ...

  5. java printstacktrace_为什么异常. printStackTrace() 被认为是不好的实践?_java_酷徒编程知识库...

    你正在触碰多个问题:1)堆栈跟踪永远不应对最终用户可见(出于用户体验和安全目的) 是的,应该可以访问它来诊断最终用户的问题,但是,最终用户不应该看到它们有两个原因:它们非常模糊和不可读,应用程序看起来 ...

  6. python字符串去掉标点_在Python去掉标点符号字符串的最佳方式_string_酷徒编程知识库...

    从效率的角度来看,你打不败translate() - 它在C中使用查找表执行原始字符串操作 - 你自己的C代码没有太多可能可以击败它.如果不担心速度,另一个选择是:exclude = set(stri ...

  7. pandas写入excel指定行_如何使用 Pandas 从excel文件读取特定行_pandas_酷徒编程知识库...

    我有一个excel文件,需要从某个工作表的行中提取某些数据.import pandas as pd xl_file = pd.ExcelFile((xlfilePath) dfs = {sheet_n ...

  8. python读取rar文件_在 python 中,如何读取由 7z 压缩的文本文件_python_酷徒编程知识库...

    这允许你stream行.import os import py7zlib class SevenZFileError(py7zlib.ArchiveError): pass class SevenZF ...

  9. 正确的python变量名_在Python,如何将变量名作为字符串?_others_酷徒编程知识库...

    我编写了一个小函数来对代码中的各种变量进行快速内联头检查,它列出了变量名,数据类型,大小和其他属性,所以,我可以快速捕捉到我所犯的任何错误,代码很简单:def details(val): vn = v ...

最新文章

  1. 贝尔实验室发布6G通信白皮书
  2. sklearn中的fit_transform和transform以及什么时候使用
  3. [SOJ] connect components in undirected graph
  4. Bugku-CTF之你必须让他停下+头等舱
  5. BZOJ 4557 JLOI2016 侦查守卫 树形dp
  6. 那个盗窃比尔·盖茨、马斯克、巴菲特推特账号,发布诈骗广告的少年被捕了!年仅17岁...
  7. 用maven按环境打包SpringBoot的不同配置文件
  8. 回溯法2——和尚挑水
  9. Linux中压缩文件后生成,在 Linux系统中,压缩文件后生成后缀为.gz文件的命令是 gzip 。...
  10. 【CAR笔记2】IGBT相关知识
  11. (转载) Android RecyclerView 使用完全解析 体验艺术般的控件
  12. Vim编辑器的使用之替换
  13. 64位windows系统的PatchGuard
  14. Snipe IT资产管理系统(phpstudy_pro)搭建笔记
  15. 科学上网后(关掉VPN)之后无法正常连接网络
  16. 解决Unity3d 图片黑边问题
  17. 论如何科学地倒牛奶~
  18. Tkinter 8.5 参考手册: a GUI for Python (五)8(鼠标)指针
  19. Hu不变矩原理及opencv实现
  20. 李刚疯狂java讲义第3_【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型...

热门文章

  1. 支付宝杀疯了,又开始「撒钱」啦
  2. mMySQL中触发器和游标的介绍与使用L8.0.23免安装版配置详细教程 msi安装超详细教程
  3. 20201231WEB渗透学习之Linux内核提权
  4. python截取视频图像_python提取视频第一帧图片
  5. c语言程序设计 出圈游戏,出圈游戏程序及设计.doc
  6. 设计模式—策略模式(用lol来分析)
  7. 瑞银和彭博在全球12个城市推出“Girls Take Finance”,鼓励青少年女孩成长为新一代的领导人
  8. C语言定时关机小程序
  9. 宏碁笔记本重装系统,识别不到硬盘
  10. python stdout_python中stdout输出不缓存的设置方法