展开全部
用byte数组转
java 免费源62616964757a686964616fe58685e5aeb931333335316439码视频:http://www.diecolor.com/download.html
package com.shop.utils;
002
003
import java.security.KeyFactory;
004
import java.security.KeyPair;
005
import java.security.KeyPairGenerator;
006
import java.security.NoSuchAlgorithmException;
007
import java.security.PrivateKey;
008
import java.security.PublicKey;
009
import java.security.Signature;
010
import java.security.spec.PKCS8EncodedKeySpec;
011
import java.security.spec.X509EncodedKeySpec;
012
import java.util.ArrayList;
013
import java.util.HashMap;
014
015
import com.shop.domain.User;
016
017
/**
018
* 验证用户的公私钥
019
*
020
* @author V
021
*
022
*/
023
public class RSACheck {
024
025
public HashMap getKey(){
026
KeyPairGenerator key = null;
027
try {
028
key = KeyPairGenerator.getInstance("RSA");
029
} catch (NoSuchAlgorithmException e) {
030
031
e.printStackTrace();
032
}
033
key.initialize(1024);
034
// 产生密钥对
035
KeyPair keyPair = key.generateKeyPair();
036
// 得到公钥
037
PublicKey publicKey = keyPair.getPublic();
038
// 得到私钥
039
PrivateKey privateKey = keyPair.getPrivate();
040
041
byte[] keyBytes=publicKey.getEncoded();
042
byte[] keyBytes2=privateKey.getEncoded();
043
044
//base64加密,方便以字符串存入数据库或文件
045
String temp = new sun.misc.BASE64Encoder().encodeBuffer(keyBytes);
046
System.out.println("公钥"+temp);
047
048
String temp2 = new sun.misc.BASE64Encoder().encodeBuffer(keyBytes2);
049
System.out.println("私钥"+temp2);
050
051
HashMap keyRs=new HashMap();
052
keyRs.put("privateKey", temp2);
053
keyRs.put("publicKey", temp);
054
return keyRs;
055
}
056
057
//验证私钥公钥
058
public boolean checkKey(User user,String privateKey) {
059
060
try {
061
//获取数据库中的用户公钥
062
String sql="select code from users where name=? ";
063
String[] value = { user.getName()};
064
ArrayList> rs=new DBTool().doQuery(sql, value);
065
String publicKey=rs.get(0).get("code");
066
067
System.out.println(publicKey);
068
// base64解密
069
byte[] sikey = new sun.misc.BASE64Decoder().decodeBuffer(privateKey);
070
byte[] gongkey = new sun.misc.BASE64Decoder().decodeBuffer(publicKey);
071
072
// 将byte[]转成密钥
073
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); // 指定算法RSA,得到一个KeyFactory的实例
074
075
// 解码私钥
076
PKCS8EncodedKeySpec pKCS8EncodedKeySpec =new PKCS8EncodedKeySpec(sikey);
077
PrivateKey privateKey2 = keyFactory.generatePrivate(pKCS8EncodedKeySpec);
078
// 解码公钥
079
080
KeyFactory keyFactory2 = KeyFactory.getInstance("RSA"); // 指定算法RSA,得到一个KeyFactory的实例
081
X509EncodedKeySpec x509KeySpec2 = new X509EncodedKeySpec(gongkey);
082
PublicKey publicKey2 = keyFactory2.generatePublic(x509KeySpec2);
083
084
085
Signature sig = Signature.getInstance("MD5WithRSA");
086
// 获取用户名
087
byte[] data = user.getName().getBytes("UTF8");
088
// 获取私钥
089
sig.initSign(privateKey2);
090
sig.update(data);
091
byte[] signatureByte = sig.sign();
092
sig.initVerify(publicKey2);
093
sig.update(data);
094
boolean verified = false;
095
verified = sig.verify(signatureByte);
096
if (verified) {
097
System.out.println("验证成功");
098
return true;
099
} else {
100
System.out.println("验证失败");
101
return false;
102
}
103
} catch (Exception e) {
104
// e.printStackTrace();
105
System.out.println("验证失败2");
106
return false;
107
}
108
109
}
110
}
追问
非常感谢你,虽然你提供的是公私钥的字串和密钥的转换,但是你给我提供了一个思路,估计我去查查JDK帮助文档就能找到解决方法(新手,还没这个习惯)。我看你这源码里还有签名,你还有更多这方面例子的源码么,有的话希望你能给我一些?非常感谢!!(我的QQ邮箱:578930517@qq.com)
本回答由提问者推荐
已赞过
已踩过<
你对这个回答的评价是?
评论
收起