您的位置:首页 > 其它

文章标题

2016-05-19 17:35 323 查看
/// 验证签名
public static boolean Verify(String Xml, String publicKeyPath) throws Exception {
int begin = Xml.indexOf("<Signature>") + "<Signature>".length();
int len = Xml.indexOf("</Signature>") - begin;

String SignatureString = Xml.substring(begin, len+begin);
String OriginalString = Xml.replace("<Signature>" + SignatureString + "</Signature>", "");
// 将base64签名数据转码为字节
byte[] signedBase64 = Base64Utils.decodeFromString(SignatureString);//(OriginalString.getBytes());
// TODO 数字证书
InputStream inStream = new FileInputStream(publicKeyPath);// 文件
CertificateFactory cf = CertificateFactory.getInstance("X.509");//X.509
X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream);
inStream.close();
// 得到公钥
RSAPublicKey publicKey = (RSAPublicKey) cert.getPublicKey();
// 构建签名
Signature signature = Signature.getInstance(cert.getSigAlgName());//SHA1WithRSA
signature.initVerify(publicKey);
signature.update(Base64Utils.encode(OriginalString.getBytes()));
return signature.verify(signedBase64);
}

/**
* <p>
* 生成数据签名
* </p>
*
* @param data 源数据
* @param keyStorePath 密钥库存储路径
* @param alias 密钥库别名
* @param password 密钥库密码
* @return
* @throws Exception
*/
//如果已知私钥XXX.pfx,和私钥密码,但不清楚密钥库别名是什么,可以用以下命令查看私钥信息
//keytool -v -list -storetype pkcs12 -keystore XXX.pfx
public static String sign(String data, String keyStorePath, String alias, String password)
throws Exception {
// 获取私钥
FileInputStream in = new FileInputStream(keyStorePath);
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(in, password.toCharArray());
in.close();
// 获得证书
X509Certificate x509Certificate =(X509Certificate)keyStore.getCertificate(alias);
// X509Certificate x509Certificate = (X509Certificate) getCertificate(keyStorePath, alias, password);
// 取得私钥
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, password.toCharArray());
// 构建签名
Signature signature = Signature.getInstance(x509Certificate.getSigAlgName());
signature.initSign(privateKey);
signature.update(data.getBytes("utf-8"));
byte[] sing = signature.sign();
return Base64Utils.encodeToString(sing);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: