文章标题

来源:互联网 发布:网站入侵数据更改高手 编辑:程序博客网 时间:2024/05/18 09:34
    /// 验证签名    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);    }
0 0
原创粉丝点击