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) ...
随机推荐
- 京东商品及评论爬虫(selenium)
代码查看https://gitee.com/MarkPolaris/reptile/tree/master/jd 中的gly和demo03
- EnableFeignClients基本配置
pom.xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId&g ...
- (六)QDialog,QMessageBox,QFileDialog,QColorDialog颜色,QFontDialog字体
QDialog 对话框: 1.模态对话框: QDialog dlg(this); // 显示模态对话框 exec ,后面的不可操作 dlg.exec(); // 阻塞 2.非模态对话框: QDialo ...
- CodeForces - 597C Subsequences (树状数组+动态规划)
For the given sequence with n different elements find the number of increasing subsequences with k + ...
- day16,模块 , 用户管理系统 , 购物车程序 , 分页显示.
#!/usr/bin/env python# -*- coding:utf-8 -*- # 1.列举你常见的内置函数."""强制转换:int() / str() / li ...
- AForge调用摄像头拍照时设置分辨率
简单记录下AForge2.2.5.0版本调用摄像头拍照时设置分辨率的方法. FilterInfo info = _videoDevices[0];//获取第一个摄像头 _cameraDevice = ...
- python的多线程
1.多线程的例子 import threading #首先导入threading模块,这是使用多线程的前提 from time import ctime,sleep def music(func): ...
- java(11)带参数的方法
一.java中的包(package) 1.1 包,对应到磁盘中的文件夹 1.2 新建一个class,默认保存在缺省包中 1.3 声明包的关键字:package package语句,置顶位置 1.4 导 ...
- MySQL学习11 - MySQL创建用户和授权
权限管理 权限管理 我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作.包括select.update.delete.update.grant等操作.那么一般情况在公司之后DBA工程师 ...
- 安装hue及hadoop和hive整合
环境: centos7 jdk1.8.0_111 Hadoop 2.7.3 Hive1.2.2 hue-3.10.0 Hue安装: 1.下载hue-3.10.0.tgz: https://dl.dro ...