📄 digitalsignature.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 + -