java安全架构____读取keystore文件的密钥对和证书信息

3/8/2017来源:ASP.NET技巧人气:1562

//1.keytool工具生成keystore文件

keytool -genkey -alias csdn -keypass 123456 -keyalg RSA -keysize 1024 -validity 3650 -keystore D:/csdn_server.keystore -storepass 888999

//讲文件复制到工程中

//代码段

package com.demo.test;

import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PRivateKey;
import java.security.PublicKey;
import java.security.cert.Certificate;
import sun.misc.BASE64Decoder;  
import sun.misc.BASE64Encoder;  
/**
 * @author Administrator
 * 使用以下命令生成keystore文件
 * alias:别名csdn
 * keypass:别名密码 123456
 * storepass:秘钥库的密码:888999
 * keytool -genkey -alias csdn -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore D:/csdn_server.keystore -storepass 888999
 */
public class TestKeyStore {
	public static void main(String[] args) throws Exception {
		//读取keystore文件转换为keystore密钥库对象
		FileInputStream fis = new FileInputStream("/csdn_server.keystore");
		//因为生成证书的类型为JKS 也有其他的格式
		KeyStore keyStore = KeyStore.getInstance("JKS");
		//该密钥库的密码"888999"
		String storepass="888999";
		keyStore.load(fis, storepass.toCharArray());
		fis.close();
		// 从keystore中读取证书和私钥
		String alias = "csdn";//别名
		String keypass = "123456"; //别名密码
		Certificate certificate = keyStore.getCertificate(alias);
		//读取公钥对象
		PublicKey publicKey = certificate.getPublicKey();
		System.out.println("提取的公钥为___:\n"+encodeBase64(publicKey.toString()));
		//读取私钥对象
		PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias,keypass.toCharArray());
		System.out.println("提取的私钥为___:\n"+encodeBase64(privateKey.toString()));
	}
	// 对字符密码加密  
    public static String encodeBase64(String str) throws Exception {  
        // 1.将传递进来的字符串密码 转换为字节数组 放到base64加密工具里 生产出一个加了密的字符串  
        String base64Str = new BASE64Encoder().encode(str.getBytes("UTF-8"));  
        return base64Str;  
    }  
  
    // 对密文字符串解密  
    public static String decodeBase64(String base64Str) throws Exception {  
        // 根据加了密的字符串 使用base64的解密工具里 获取原来的明文字符串密码  
        byte[] bytes = new BASE64Decoder().decodeBuffer(base64Str);  
        String generalStr = new String(bytes, "UTF-8");  
        return generalStr;  
    }  	
}

//运行结果