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) ...
随机推荐
- Java 获取当前线程、进程、服务器ip
/** * 获取当前线程id */ private Long getThreadId() { try { return Thread.currentThread().getId(); } catch ...
- Java基础 -- 持有对象(容器)
一 容器的用途 如果对象的数量与生命周期都是固定的,自然我们也就不需要很复杂的数据结构. 我们可以通过创建引用来持有对象,如 Class clazz; 也可以通过数组来持有多个对象,如 Class[] ...
- codeforces-1133 (div3)
A.先全部化成分钟数,取平均数之后化成正常时刻. #include <map> #include <set> #include <ctime> #include & ...
- pandas技巧两则——列内元素统计和列内元素排序
更新:后来忽然发现有个cumcount()函数,支持正排倒排,所以以下说的那些基本都没啥用了. 最近做比赛线上无甚进展,所以先小小地总结遇到的一些困难和解决的方法,以防之后忘记.毕竟总是忙着大步赶路的 ...
- SSH 连接慢
关闭连接时的 DNS 解析 # 编辑配置文件,修改如下配置项 vim /etc/ssh/sshd_config GSSAPIAuthentication no UseDNS no # 重启服务 sys ...
- 1.saltstack入门
1.安装 master: yum install salt-master salt-minion -y minion: yum install salt-minion -y 2.修改配置文件(mini ...
- 打开即时通讯服务器openfire的大门
1.什么是即时通讯 你现在最常用的软件是什么,如果我没有猜错,应该是QQ和微信,是的,他们就是即时通讯软件. 一个可以让你无时无刻,只要有网络就能够沟通的工具,就是即时通讯工具.那么本教程,我们主要以 ...
- PMP知识点(五)——配置管理
配置控制重点关注可交付成果及各个过程的技术规范,而变更控制则着眼于识别.记录.批准或否决对项目文件,可交付成果或基准的变更. 包括在实施整体变更控制过程中的部分配置管理活动有: 1.配置识别. 识别与 ...
- Future of Future
innovation 革新 , <社会创新实验室 宣传片>的个人记录(有加戏便于我自己理解) 1. 清洁能源 => sustainable 家. 2. 老龄化 => 外出接 ...
- python的copy模块理解
首先直接上结论: —–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在.所以改变原有被复制对象不会对已经复制出来的新对象产生影响. —–而浅复制并不会产生一个独立的对 ...