Java读取证书
import java.io.FileInputStream;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec; import Decoder.BASE64Encoder; public class TestRSA { //**************************************获取私钥******************************************************************
//获取私钥
public static String GetPrivateKey()
{
try{ KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); keystore.load(new FileInputStream("C:\\Program Files\\Java\\jre7\\bin\\xiaoyaodijun.keystore"), "xxxxxx".toCharArray()); KeyPair keyPair = getKeyPair(keystore, "xiaoyaodijun.keystore", ""); PrivateKey privateKey = keyPair.getPrivate(); BASE64Encoder encoder=new BASE64Encoder(); String encoded=encoder.encode(privateKey.getEncoded());
System.out.println("private key = " + encoded); return encoded;
}catch(Exception ex){
return "";
}
} //获取KeyPair
public static KeyPair getKeyPair(KeyStore keystore, String alias, String password) {
try {
Key key=keystore.getKey(alias,password.toCharArray());
if(key instanceof PrivateKey) {
Certificate cert=keystore.getCertificate(alias); BASE64Encoder encoder=new BASE64Encoder(); PublicKey publicKey=cert.getPublicKey(); String encoded=encoder.encode(publicKey.getEncoded());
System.out.println("publicKey key = " + encoded); return new KeyPair(publicKey,(PrivateKey)key);
}
}catch (Exception e) {
}
return null;
} //**************************************获取私钥******************************************************************
//获取公钥
public static String GetPublicKey()
{
try{ String cerPath="E:\\Java开发\\newTest\\src\\libs\\donghuangtaiyi.cer"; X509Certificate x509Certificate = null;
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
FileInputStream fileInputStream = new FileInputStream(cerPath);
x509Certificate = (X509Certificate) certificateFactory.generateCertificate(fileInputStream);
fileInputStream.close(); PublicKey publicKey = x509Certificate.getPublicKey();
BASE64Encoder encoder=new BASE64Encoder();
String encoded=encoder.encode(publicKey.getEncoded());
System.out.println("publicKey key = " + encoded); return encoded;
}
catch(Exception ex)
{ System.out.println(ex);
return "";
} } //************************************* 加签 *************************************************************** public static final String KEY_ALGORITHM = "RSA"; /**
* 校验数字签名
*
* @param content 数据
* @param privateKey私钥
* @throws Exception
*
*/
public static String sign(String content, String privateKey) throws Exception { byte[] data=content.getBytes("utf-8"); // 解密由base64编码的私钥
byte[] keyBytes = HashUtil.decryptBASE64(privateKey); // 构造PKCS8EncodedKeySpec对象
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); // KEY_ALGORITHM 指定的加密算法
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); // 取私钥匙对象
PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec); // 用私钥对信息生成数字签名
Signature signature = Signature.getInstance("SHA384WithRSA");
signature.initSign(priKey);
signature.update(data); return HashUtil.encryptBASE64(signature.sign());
} /**
* 校验数字签名
*
* @param content 数据
* @param publicKey公钥
* @param sign 数字签名
* @return 校验成功返回true 失败返回false
* @throws Exception
*
*/
public static boolean verify(String content, String publicKey, String sign)
throws Exception { byte[] data=content.getBytes("utf-8"); // 解密由base64编码的公钥
byte[] keyBytes = HashUtil.decryptBASE64(publicKey); // 构造X509EncodedKeySpec对象
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); // KEY_ALGORITHM 指定的加密算法
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); // 取公钥匙对象
PublicKey pubKey = keyFactory.generatePublic(keySpec); Signature signature = Signature.getInstance("SHA384WithRSA");
signature.initVerify(pubKey);
signature.update(data); // 验证签名是否正常
boolean result= signature.verify(HashUtil.decryptBASE64(sign));
return result;
}
}
public static string ConvertEncodeBase64URLSafe(string data)
{
return data.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_');
}
public static string ConvertDecodeBase64URLSafe(string data)
{
data = data.Replace('-', '+').Replace('_', '/');
int len = data.Length % ;
if (len > )
{
data += "====".Substring(, - len);
}
return data;
Java读取证书的更多相关文章
- Java对证书的操作
1 Java程序从证书文件读取证书 import java.io.*; import java.security.cert.*; public class PrintCert{ public stat ...
- XP机器上WCF采用X509证书加密时IIS读取证书的授权
XP机器上WCF采用X509证书加密时IIS读取证书的授权 XP下的授权命令为:winhttpcertcfg -g -c LOCAL_MACHINE\My -s 证书名称 -a "ASPNE ...
- java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)
java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...
- 【转】Java读取matlab的.mat数据文件
参考:Java读取mat文件 下载链接:ujmp jmatio 下载完两个.jar文件之后,如何引用到java项目当中?项目名称->右键->Property->Java Build ...
- java读取输入流
java读取输入流两种 private static byte[] readStream(InputStream in){ if(in==null){ return null; } byte[] bu ...
- Java读取Level-1行情dbf文件极致优化(3)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- Java读取Level-1行情dbf文件极致优化(2)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- java keytool证书工具使用小结
java keytool证书工具使用小结 在Security编程中,有几种典型的密码交换信息文件格式: DER-encoded certificate: .cer, .crt PEM-encod ...
- java读取properties配置文件总结
java读取properties配置文件总结 在日常项目开发和学习中,我们不免会经常用到.propeties配置文件,例如数据库c3p0连接池的配置等.而我们经常读取配置文件的方法有以下两种: (1) ...
随机推荐
- Linux环境配置错误记录
1. pip install --special_version pip10. 版本. 使用命令: python -m pip install pip== 其中, -m 参数的意思是将库中的pyt ...
- macos + vs code + grep 进行多文件搜索
macos下,打开vs code后,选择view菜单,点击terminal, 在vs code中打开控制台.执行以下grep命令: grep -w "p" -n -r /User ...
- django上传图片简单验证以及自动修改图片名称
django实现文件(图片)上传之后自动修改名称以及页面上传图片时的各种提醒: 1.先在你项目中添加一个文件夹如:system 在文件夹下添加__init__.py 和storage.py文件,并在s ...
- ansible迭代/迭代嵌套/同步异步/特殊topic说明
tasks直接举例说明: ---- host: docker remote_user: root gather_facts: yes serial: 3 #表示同一时间控制主机数量(值可以是数值 ...
- I/O模型系列之二:Unix的五种网络I/O模型
1. Unix的五种I/O模型 从上往下:阻塞程度(高-----低)I/O效率 (低-----高) 阻塞I/O(Blocking I/O):传统的IO模型 非阻塞I/O(Non-Blocking I ...
- HDU 2717(* bfs)
题意是在一个数轴上,每次可以一步到达当前位置数值的 2 倍的位置或者数值 +1 或数值 -1 的位置,给定 n 和 k,问从数值为 n 的位置最少多少步可以到达数值为 k 的位置. 用广搜的方法,把已 ...
- 编译VisualVM源码解决乱码问题
编译VisualVM源码解决乱码问题 起因 今天在使用VisualVM对测试服务器进行JVM监控的时候,发现所有统计图的横纵坐标都是显示乱码(小方块),即使我的Ubuntu系统使用的是英文语言环境.奇 ...
- jmeter中的函数
1.函数帮助 1.tool-------->function helper dialog 可以查看函数帮助 2.jmeter中的函数 1.函数格式 ${__funcctionname(var ...
- windows查看已连接WIFI密码
找到wifi图标. 右键,选择打开“网络和internet设置”,选择状态. 选择更改适配器设置. 选择你所连接的WIFI网络. 右键,选择状态. 选择无线属性. 选择安全. 勾选显示字符.
- 【bzoj 3495】PA2010 Riddle
Description 有n个城镇被分成了k个郡,有m条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. Input 第一行有三个整数,城镇数n(1<=n&l ...