⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 digitalsignature.java

📁 介绍xml加密和xml数字签名的方法的源代码
💻 JAVA
字号:
package XMLEncrypt;

import java.io.FileInputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import org.w3c.dom.Document;

import com.verisign.messaging.MessageValidity;
import com.verisign.messaging.WSSecurity;

import com.verisign.xmlsig.KeyInfo;
import com.verisign.xmlsig.SigningKey;
import com.verisign.xmlsig.SigningKeyFactory;
import com.verisign.xmlsig.VerifyingKey;
import com.verisign.xmlsig.VerifyingKeyFactory;

public class DigitalSignature {
	
	public static void main(String args[]) throws Exception{
		DigitalSignature sign = new DigitalSignature();
		sign.sign();
		//sign.verify();
		
		//TransformingBetweenDOMandXML transform = new TransformingBetweenDOMandXML();
		//Document doc = transform.XMLtoDOM("d://a.butte");
		//DigitalSignature.sign2(doc,"D://src//src//client//client.keystore", "JKS", "changeit","Server","changeit");
		//transform.DOMtoXML(doc, "d://signResult.butte");
	}
	/**
	 *对xml进行签名
	 */
	public void sign()
	{	
		try
		{
			Encrypt enc = new Encrypt();
			KeyPair keypair = enc.generateKayPair();
			Key publicKey = keypair.getPublic();
			Key privateKey = keypair.getPrivate();
			//Key privatekey = enc.generateKayPair().getPrivate();
			//Key publickey = enc.generateKayPair().getPublic();
			TransformingBetweenDOMandXML transform = new TransformingBetweenDOMandXML();
			Document doc = transform.XMLtoDOM("d://a.butte");
			KeyInfo keyInfo = new KeyInfo();

			SigningKey signingKey = SigningKeyFactory.makeSigningKey(privateKey);
			WSSecurity wsSecurity = new WSSecurity();
			wsSecurity.setPreferredNamespace("http://schemas.xmlsoap.org/ws/2003/06/secext");
			//对SOAP消息进行签名
			wsSecurity.sign(doc, signingKey, keyInfo);
			transform.DOMtoXML(doc, "d://signResult.butte");
			VerifyingKey verifyingkey = VerifyingKeyFactory.makeVerifyingKey(publicKey);
			MessageValidity[] resa = wsSecurity.verify(doc, null, verifyingkey , null);
			for (int len = 0; len < resa.length; len++){
				System.out.println("result[" + len + "] = " + (resa[len].isValid()?"验证通过":"验证不通过"));
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}		
	}
	
	/**
	 *验证已经签名的SOAP消息
	 */
	public void verify()
	{
		try
		{
			// 读取XML源文件到文档中
			Encrypt enc = new Encrypt();
			Key publickey = enc.generateKayPair().getPublic();
			TransformingBetweenDOMandXML transform = new TransformingBetweenDOMandXML();
			Document doc = transform.XMLtoDOM("e://signResult.butte");
			//VerifyingKey key = ingKeyFactory.;
			//TrustVerifier trustverifier = TrustVerifier();
			
			WSSecurity wsSecurity = new WSSecurity();
/*
			com.verisign.messaging.MessageValidity[] resa =
			wsSecurity.v
        	wsSecurity.verify(source,verifier,null,null);
        	System.out.println("检验结果:");
			for (int len = 0; len < resa.length; len++){
				System.out.println("result[" + len + "] = " + (resa[len].isValid()?"验证通过":"验证不通过"));
			}*/
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}

	public static void sign2(Document doc, String keystore, String storetype,
            String storepass, String alias,String keypass)throws Exception {
		try
        {
			FileInputStream fileInputStream = new FileInputStream(keystore);
            java.security.KeyStore keyStore = java.security.KeyStore.getInstance(storetype);
            keyStore.load(fileInputStream, storepass.toCharArray());
            PrivateKey key = (PrivateKey)keyStore.getKey(alias, keypass.toCharArray());
            X509Certificate cert = (X509Certificate)keyStore.getCertificate(alias);
            SigningKey sk = SigningKeyFactory.makeSigningKey(key);
            KeyInfo ki = new KeyInfo();
            ki.setCertificate(cert);
            WSSecurity wSSecurity = new WSSecurity();//ws-security.jar中包含的WSSecurity类
            wSSecurity.sign(doc, sk, ki);//签名。
        }
		catch(Exception e)
		{
			e.printStackTrace();
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -