pki java相关代码参考
2010-02-25 14:12
405 查看
keytool -genkey -dname "CN=demo, OU=softDept, O=company,
L=puddong,S=shanghai, C=cn" -alias demo -keyalg RSA -keysize 1024
-keystore demoKeystore -validity 3650 -storepass storePwd -keypass
demoPwd
生成保存公钥和私钥的密钥仓库,保存在demoKeystore文件中。这里storepass 和 keypass
不要有java 正则表达式中的特殊字符,否则程序里要转义麻烦。
keytool -export -alias demo -keystore demoKeystore -rfc -file
demo.cer //从密钥仓库中导出保存公钥的证书
输入keypass 即demoPwd
try{
//
密钥仓库
KeyStore ks = KeyStore.getInstance("JKS");
//读取密钥仓库
FileInputStream
ksfis = new FileInputStream("demoKeystore");
BufferedInputStream
ksbufin = new BufferedInputStream(ksfis);
char[] storePwd =
"storePwd".toCharArray();
ks.load(ksbufin, storePwd);
ksbufin.close();
char[]
keyPwd = "demoPwd".toCharArray();
//从密钥仓库得到私钥
PrivateKey priK =
(PrivateKey) ks.getKey("demo", keyPwd);
//生成cipher
Cipher
cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding",new
org.bouncycastle.jce.provider.BouncyCastleProvider());
//用私钥初始化cipher
cipher.init(Cipher.ENCRYPT_MODE,
priK);
byte[] plain = "This is plain text".getBytes("UTF-8");
//
因为用的1024位rsa算法,一次只能加密1024/8-11字节数据,分开加密
byte[] code = new
byte[(((plain.length-1)/117+1))*128];
int ixplain = 0;
int ixcode = 0;
while((plain.length - ixplain) > 117)
{//每117字节做一次加密
ixcode += cipher.doFinal(plain,
ixplain, 117, code, ixcode);
ixplain += 117;
}
cipher.doFinal(plain, ixplain, plain.length - ixplain,
code, ixcode);
//加密后的code
System.out.println(Arrays.toString(code));
//通常会用base64编码
String base64 = encoder.encode(code);
CertificateFactory
certificatefactory = CertificateFactory
.getInstance("X.509");
//
读取证书
FileInputStream fin = new FileInputStream("demo.cer");
X509Certificate
certificate = (X509Certificate) certificatefactory
.generateCertificate(fin);
fin.close();
//
得到公钥
PublicKey pubK = certificate.getPublicKey();
//初始
化cipher
cipher.init(Cipher.DECRYPT_MODE, pubK);
//base64
解码
code = decoder.decodeBuffer(base64);
System.out.println(Arrays.toString(code));
byte[] plain2 =
new byte[code.length];
int ixplain2 = 0;
int ixcode2 = 0;
while((code.length - ixcode2) > 128)
{//每128字节做一次解密
ixplain2 += cipher.doFinal(code,
ixcode2, 128, plain2, ixplain2);
ixcode2 += 128;
}
ixplain2 += cipher.doFinal(code, ixcode2, code.length -
ixcode2, plain2, ixplain2);
String s2 = new
String(plain2, 0, ixplain2, "UTF-8");
System.out.println(s2);
}catch(Exception ex){
ex.printStackTrace();
}
http://www.blogjava.net/neumqp/archive/2006/03/02/33211.html
L=puddong,S=shanghai, C=cn" -alias demo -keyalg RSA -keysize 1024
-keystore demoKeystore -validity 3650 -storepass storePwd -keypass
demoPwd
生成保存公钥和私钥的密钥仓库,保存在demoKeystore文件中。这里storepass 和 keypass
不要有java 正则表达式中的特殊字符,否则程序里要转义麻烦。
keytool -export -alias demo -keystore demoKeystore -rfc -file
demo.cer //从密钥仓库中导出保存公钥的证书
输入keypass 即demoPwd
try{
//
密钥仓库
KeyStore ks = KeyStore.getInstance("JKS");
//读取密钥仓库
FileInputStream
ksfis = new FileInputStream("demoKeystore");
BufferedInputStream
ksbufin = new BufferedInputStream(ksfis);
char[] storePwd =
"storePwd".toCharArray();
ks.load(ksbufin, storePwd);
ksbufin.close();
char[]
keyPwd = "demoPwd".toCharArray();
//从密钥仓库得到私钥
PrivateKey priK =
(PrivateKey) ks.getKey("demo", keyPwd);
//生成cipher
Cipher
cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding",new
org.bouncycastle.jce.provider.BouncyCastleProvider());
//用私钥初始化cipher
cipher.init(Cipher.ENCRYPT_MODE,
priK);
byte[] plain = "This is plain text".getBytes("UTF-8");
//
因为用的1024位rsa算法,一次只能加密1024/8-11字节数据,分开加密
byte[] code = new
byte[(((plain.length-1)/117+1))*128];
int ixplain = 0;
int ixcode = 0;
while((plain.length - ixplain) > 117)
{//每117字节做一次加密
ixcode += cipher.doFinal(plain,
ixplain, 117, code, ixcode);
ixplain += 117;
}
cipher.doFinal(plain, ixplain, plain.length - ixplain,
code, ixcode);
//加密后的code
System.out.println(Arrays.toString(code));
//通常会用base64编码
String base64 = encoder.encode(code);
CertificateFactory
certificatefactory = CertificateFactory
.getInstance("X.509");
//
读取证书
FileInputStream fin = new FileInputStream("demo.cer");
X509Certificate
certificate = (X509Certificate) certificatefactory
.generateCertificate(fin);
fin.close();
//
得到公钥
PublicKey pubK = certificate.getPublicKey();
//初始
化cipher
cipher.init(Cipher.DECRYPT_MODE, pubK);
//base64
解码
code = decoder.decodeBuffer(base64);
System.out.println(Arrays.toString(code));
byte[] plain2 =
new byte[code.length];
int ixplain2 = 0;
int ixcode2 = 0;
while((code.length - ixcode2) > 128)
{//每128字节做一次解密
ixplain2 += cipher.doFinal(code,
ixcode2, 128, plain2, ixplain2);
ixcode2 += 128;
}
ixplain2 += cipher.doFinal(code, ixcode2, code.length -
ixcode2, plain2, ixplain2);
String s2 = new
String(plain2, 0, ixplain2, "UTF-8");
System.out.println(s2);
}catch(Exception ex){
ex.printStackTrace();
}
http://www.blogjava.net/neumqp/archive/2006/03/02/33211.html
相关文章推荐
- java登陆注册界面参考的资料和代码
- 各类Java heap space 解决方法,并通过java代码获取JVM的相关信息,所在操作系统的信息(包含eclipse&myeclipse的调试的内存设置)
- Java中2.5D游戏的设计与实现(3)—八方走法实现原理及相关代码
- [参考]用Domino的Java代理连接其它服务器邮件代码
- [编写高质量代码:改善java程序的151个建议]equals相关
- 25种java模式代码与追MM参考手册
- 【java微信支付】微信支付之扫码支付相关代码
- 结合Bootloader的相关知识,并参考ARM的汇编指令,分析下面的Bootloader代码。
- java里监听相关ActionListene的理解。========此代码是错误的,
- java 发送邮件 email相关操作代码测试,生成复杂格式邮件,发送邮件相关操作
- python检测SQL注入的相关代码(参考lijiejie)
- CompressUtils相关代码,java中文件压缩或解压已经文件的基本操作等方法
- java-Spring jdbcTemplete datasource相关代码示例
- 在Eclipse下编写HTML/CSS/JS/JSP/Java代码时,代码自动提示的相关设置
- 二叉树定义及相关术语、节点数计算公式、代码实现(遍历,Java版)
- java 图形用户界面 之 在界面中添加滑动块 示例代码 及 相关知识点
- 整理关于java实现二维码的生成和解析代码供大家参考
- CompressUtils相关代码,java中文件压缩或解压已经文件的基本操作等方法
- Eclipse打开Java文件,默认是否折叠相关位置的代码
- 优酷电视剧爬虫代码实现一:下载解析视频网站页面(4)补充: Java正则表达式Matcher.group(int group)相关类解析