验证公、私钥证书是否有效
来源:互联网 发布:刷赞软件下载 编辑:程序博客网 时间:2024/06/05 14:51
公钥在服务端使用
私钥是由服务端提供给客户端使用
问题:服务端提供的证书是否配对,怎么验证?
public class SignTest {
/**
* @author HONGXUSHUAN605
* @date 2012-6-21
* @todo TODO
* @param args
*/
private static String KEYSTORE_FILENAME="D:/translateCertificate/EXV_BIS_IFRONT_PCIS__001_PRD.pfx"; // 私钥
private static String KEYSTORE_PASSWORD="paic1234";
private static String KEYSTORE_ALIAS="1";
private static String PUBLICKEY_FILENAME="D:/translateCertificate/_PRD.cer"; // 公钥
public static void main(String[] args) {
String data="abcd";
System.out.println("开始签名...");
String signValue=signData(data,KEYSTORE_FILENAME,KEYSTORE_PASSWORD,KEYSTORE_ALIAS);
System.out.println("签名结果:"+signValue);
System.out.println("****************************");
System.out.println("开始验签...");
boolean verifies=verifyData(data,signValue+"a",PUBLICKEY_FILENAME);
System.out.println("验签结果:"+verifies);
}
public static boolean verifyData(String data, String signValue,String p7bFileName) {
boolean verifies = false;
FileInputStream in = null;
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");//取X.509格式的证书
in = new FileInputStream(p7bFileName);//取公钥证书文件的流
Certificate cert = cf.generateCertificate(in);//取出证书
PublicKey publicKey = cert.getPublicKey();//从证书里取出公钥
Signature dsa = Signature.getInstance("SHA1withRSA");//指定签名算法
dsa.initVerify(publicKey);//加入公钥
dsa.update(data.getBytes());//更新数据
BASE64Decoder decoder = new BASE64Decoder();
verifies = dsa.verify(decoder.decodeBuffer(signValue));//base64解码并用公钥验证签名
}
catch(Exception e)
{
e.printStackTrace();
}
return verifies;
}
/**
* 签名算法
* @author HONGXUSHUAN605
* @date 2012-7-2
* @todo TODO
* @param data 需要签名的内容
* @param keyStoreFileName 含私钥的文件
* @return
*/
public static String signData(String data,String keyStoreFileName,String keyStorePassword,String keyStoreAlias)
{
KeyStore keyStore;
byte[] signRstByte=null;
String signValue="";
try {
String certificateType = "";
if(keyStoreFileName.toUpperCase().indexOf("PFX")>=0){
certificateType = "PKCS12";
}else{
certificateType = "JKS";
}
keyStore = KeyStore.getInstance(certificateType);//获取JKS证书实例
FileInputStream in=new FileInputStream(keyStoreFileName);//获取证书文件流
char[]pwdChar=keyStorePassword.toCharArray();//证书密码
keyStore.load(in, pwdChar);//加载证书到keystore中
PrivateKey privateKey=(PrivateKey)keyStore.getKey(keyStoreAlias, pwdChar);//从证书中获取私钥
Signature sign=Signature.getInstance("SHA1WithRSA");//SHA1WithRSA签名算法
sign.initSign(privateKey);//设置私钥
sign.update(data.getBytes());//设置明文
signRstByte=sign.sign();//加密
BASE64Encoder encoder=new BASE64Encoder();
signValue=encoder.encodeBuffer(signRstByte);//BASE64编码
//System.out.println("签名并编码后的内容signValue=="+signValue);
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SignatureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return signValue;
}
}
- 验证公、私钥证书是否有效
- 用openssl验证证书和私钥是否有效
- 利用OpenSSL生成的私钥、公钥和证书,用来验证文件是否被修改
- 验证身份证号码是否有效
- 验证身份证是否有效
- 验证用户名是否有效
- 验证身份证号码是否有效
- C#验证身份证是否有效
- 安卓下验证身份证号是否有效
- 如何校验服务器PUSH证书是否有效?
- javascript验证是否有效Email地址
- 验证传入的身份证号是否有效
- 验证是否为有效的邮件格式
- 验证SQL帐户密码是否有效
- Openssl验证PKCS7签名是否有效
- SQL函数验证身份证号码是否有效
- js 验证日期和时间是否有效
- Winform 验证输入TextBox身份证号是否有效
- paip.环境设置 mybatis ibatis cfg 环境设置
- xcode cannot run using the selected device choose a destination with a supported architecture
- windows 命令行使用
- Windows 批处理CMD脚本语言中的输入输出重定向详解
- Android--Service之基础
- 验证公、私钥证书是否有效
- paip.环境配置整合 ibatis mybatis proxool
- Wordpress 优化小结 杜绝博客因为CPU 占用过高被封
- linux内核之bcache简介
- 浅谈Linux的内存管理机制
- 我们能从java的HelloWorld学到什么?
- 同一工程下两个独立页面间的百度地图的互相影响
- Listview 单选
- 三星GT-P7510平板刷机教程总结