java怎么读取pem文件格式_如何读取. pem 文件获得私钥和公钥_java_酷徒编程知识库...
尝试这个类。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_酷徒编程知识库...相关推荐
- java 一年 周数_在java,如何找到一年的总周数?_java_酷徒编程知识库
我得到错误的答案,2020有53周,但是这段代码给出52周,请给我一个建议,package com.hib.mapping; import java.time.LocalDate; import ja ...
- return true Java方法_java - 如何检查方法是否返回true或false?_java_酷徒编程知识库...
在Java中,if语句检查它操作数是true还是false,操作数只能是booleanboolean b = true; if (b) { System.out.println("b was ...
- java selenium 日志_java - 支持selenium日志_java_酷徒编程知识库
在自動測試中,Chrome創建了大量日誌,System.setProperty("webdriver.chrome.silentOutput","true"); ...
- java如何恢复视图_Java - 如何用reformation+Moshi创建回收站视图_java_酷徒编程知识库...
在OrderHistoryActivity Activity中,在XML中使用RecyclerView并在OrderHistoryActivity.java中创建对象. 创建item.xml文件 注: ...
- java printstacktrace_为什么异常. printStackTrace() 被认为是不好的实践?_java_酷徒编程知识库...
你正在触碰多个问题:1)堆栈跟踪永远不应对最终用户可见(出于用户体验和安全目的) 是的,应该可以访问它来诊断最终用户的问题,但是,最终用户不应该看到它们有两个原因:它们非常模糊和不可读,应用程序看起来 ...
- python字符串去掉标点_在Python去掉标点符号字符串的最佳方式_string_酷徒编程知识库...
从效率的角度来看,你打不败translate() - 它在C中使用查找表执行原始字符串操作 - 你自己的C代码没有太多可能可以击败它.如果不担心速度,另一个选择是:exclude = set(stri ...
- pandas写入excel指定行_如何使用 Pandas 从excel文件读取特定行_pandas_酷徒编程知识库...
我有一个excel文件,需要从某个工作表的行中提取某些数据.import pandas as pd xl_file = pd.ExcelFile((xlfilePath) dfs = {sheet_n ...
- python读取rar文件_在 python 中,如何读取由 7z 压缩的文本文件_python_酷徒编程知识库...
这允许你stream行.import os import py7zlib class SevenZFileError(py7zlib.ArchiveError): pass class SevenZF ...
- 正确的python变量名_在Python,如何将变量名作为字符串?_others_酷徒编程知识库...
我编写了一个小函数来对代码中的各种变量进行快速内联头检查,它列出了变量名,数据类型,大小和其他属性,所以,我可以快速捕捉到我所犯的任何错误,代码很简单:def details(val): vn = v ...
最新文章
- 贝尔实验室发布6G通信白皮书
- sklearn中的fit_transform和transform以及什么时候使用
- [SOJ] connect components in undirected graph
- Bugku-CTF之你必须让他停下+头等舱
- BZOJ 4557 JLOI2016 侦查守卫 树形dp
- 那个盗窃比尔·盖茨、马斯克、巴菲特推特账号,发布诈骗广告的少年被捕了!年仅17岁...
- 用maven按环境打包SpringBoot的不同配置文件
- 回溯法2——和尚挑水
- Linux中压缩文件后生成,在 Linux系统中,压缩文件后生成后缀为.gz文件的命令是 gzip 。...
- 【CAR笔记2】IGBT相关知识
- (转载) Android RecyclerView 使用完全解析 体验艺术般的控件
- Vim编辑器的使用之替换
- 64位windows系统的PatchGuard
- Snipe IT资产管理系统(phpstudy_pro)搭建笔记
- 科学上网后(关掉VPN)之后无法正常连接网络
- 解决Unity3d 图片黑边问题
- 论如何科学地倒牛奶~
- Tkinter 8.5 参考手册: a GUI for Python (五)8(鼠标)指针
- Hu不变矩原理及opencv实现
- 李刚疯狂java讲义第3_【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型...
热门文章
- 支付宝杀疯了,又开始「撒钱」啦
- mMySQL中触发器和游标的介绍与使用L8.0.23免安装版配置详细教程 msi安装超详细教程
- 20201231WEB渗透学习之Linux内核提权
- python截取视频图像_python提取视频第一帧图片
- c语言程序设计 出圈游戏,出圈游戏程序及设计.doc
- 设计模式—策略模式(用lol来分析)
- 瑞银和彭博在全球12个城市推出“Girls Take Finance”,鼓励青少年女孩成长为新一代的领导人
- C语言定时关机小程序
- 宏碁笔记本重装系统,识别不到硬盘
- python stdout_python中stdout输出不缓存的设置方法