文章标题
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); }
相关文章推荐
- Ruby与Ruby on Rails框架环境搭建的简明教程
- CAS 单点登录
- SaltStack 实践课程二 PHP+NGINX
- JAVA-Spring学习笔记
- ubuntu网络图标不见了解决办法
- ab压测参数说明
- spring 使用注解来调度定时任务
- 斐波那契数列(生小兔子问题)
- C语言中memset函数详解
- 异常: access denied ("java.lang.RuntimePermission" "accessDeclaredMembers")
- nyoj248 BUYING FEED(贪心orDP)
- MFC+OSG创建场景编辑器,运行时会经常弹出错误
- kafka初体验(转载+自己)
- koa中间件实现分析
- FTP 字体不识别 svg/woff/woff2字体 404错误
- 利用lavarel查询 orWhere的使用
- 大量数据表的优化方案
- Goodix系列------如何取消原生的屏幕上的三个key(如何在java里获取property)
- hdu1160(最长下降子序列+排序)
- spring boot入门(一)