我自己的基于versign实现的wss加密

原创 2008年09月30日 10:53:00
 package wss;
import com.verisign.xmlenc.*;
import com.verisign.xmlsig.*;
import javax.crypto.*;
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import java.security.*;
import java.nio.*;
import com.verisign.xpath.*;
import javax.crypto.Cipher;
import java.security.*;
import org.xmltrustcenter.verifier.X509TrustVerifier;
import java.security.cert.X509Certificate;
import org.w3c.dom.Document;
import javax.xml.soap.SOAPMessage;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import java.io.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.soap.MimeHeaders;
import javax.xml.transform.stream.StreamResult;
import javax.xml.soap.MessageFactory;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;

public class WSSUtil {
  static String PROVIDER="ISNetworks";//JSSE安全提供者。
//添加JSSE安全提供者,你也可以使用其它安全提供者。只要支持DESede算法。这是程序里动态加载还可以在JDK中静态加载
 static
 {
   java.security.Security.addProvider(new com.isnetworks.provider.jce.ISNetworksProvider());
}
/**
*对XML文档进行数字签名。
*/

  public WSSUtil() {
  }
  public  void encrypt(Document doc, String keystore, String storetype,
                               String storepass, String alias,XPath path){
  try{
    FileInputStream fileInputStream = new FileInputStream(keystore);
    java.security.KeyStore keyStore = java.security.KeyStore.getInstance(storetype);
    keyStore.load(fileInputStream, storepass.toCharArray());
    X509Certificate cert = (X509Certificate)keyStore.getCertificate(alias);
    PublicKey pubk = cert.getPublicKey();
    KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede",PROVIDER);
    keyGenerator.init(168, new SecureRandom());
    SecretKey key = keyGenerator.generateKey();
    KeyInfo ki = new KeyInfo();
    ki.setCertificate(cert);

    AlgorithmType dataEncryptionAlgoType = AlgorithmType.TRIPLEDES;

   com.verisign.xmlenc.AlgorithmType keyEncryptionAlgoType = com.verisign.xmlenc.AlgorithmType.RSA1_5;
   KeyInfo keyInfo = new KeyInfo();


   com.verisign.xmlenc.Encryptor enc =new com.verisign.xmlenc.Encryptor(doc, key, AlgorithmType.TRIPLEDES, pubk, AlgorithmType.RSA1_5, ki);
   enc.encryptInPlace(path);

  }
  catch (Exception e) {
   System.out.println("Some exception");
   e.printStackTrace();
  }}

public  void decrypt(Document doc, String keystore, String storetype,
                               String storepass, String alias, String keypass){
   try{
     FileInputStream fileInputStream = new FileInputStream(keystore);
     java.security.KeyStore keyStore = java.security.KeyStore.getInstance(storetype);
     keyStore.load(fileInputStream, storepass.toCharArray());
     PrivateKey prvk2 = (PrivateKey)keyStore.getKey(alias, keypass.toCharArray());


   String xpath = "//xenc:EncryptedData";
   String[] ns ={ "xenc", "http://www.w3.org/2001/04/xmlenc#" };
   XPath path = new XPath(xpath, ns);

   com.verisign.xmlenc.Decryptor dec=new com.verisign.xmlenc.Decryptor(doc, prvk2, path);
   dec.decryptInPlace();
   WSSecurityExtn.removeWSSEncryptedKey (doc);
   WSSecurityExtn.removeWSSInfo(doc);
 }
 catch (Exception e) {
  System.out.println("Some exception");
  e.printStackTrace();
 }
}

public  Document readXML(String filename) throws
Exception {
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      dbf.setNamespaceAware(true);
      DocumentBuilder db = dbf.newDocumentBuilder();
      Document doc = db.parse(filename);
      return doc;
  }

 public  void writeXML(Document doc, OutputStream os) throws
  Exception {
      TransformerFactory tf = TransformerFactory.newInstance();
      Transformer transformer = tf.newTransformer();
      transformer.transform(new DOMSource(doc), new StreamResult(os));
  }

public  SOAPMessage convertDocumentToSOAPMessage(Document doc)
     throws Exception {
   System.out.println("运行到这里convertDocumentToSOAPMessage");
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    System.out.println("运行到这里1convertDocumentToSOAPMessage");
    DOMSource ds=new  DOMSource(doc);
    System.out.println("运行到这里-1convertDocumentToSOAPMessage");
    transformer.transform(ds, new StreamResult(byteArrayOutputStream));
    System.out.println("运行到这里2convertDocumentToSOAPMessage");
    MimeHeaders header = new MimeHeaders();
    header.addHeader("Content-Type", "text/xml");
    MessageFactory factory = MessageFactory.newInstance();
    System.out.println("运行到这里3convertDocumentToSOAPMessage");
    SOAPMessage soapMsg = factory.createMessage(header,new ByteArrayInputStream(byteArrayOutputStream.toByteArray(),0, byteArrayOutputStream.size()));
    System.out.println("util中的document转为message"+soapMsg.getSOAPPart().getEnvelope());
    return soapMsg;
   }

   /**
    * SOAPMessage转换成Document
    */
   public  Document convertSoapMessageToDocument(SOAPMessage soapMsg)
     throws Exception {
    System.out.println("wssutil"+soapMsg);
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    soapMsg.writeTo(byteArrayOutputStream);
    ByteArrayInputStream bais = new ByteArrayInputStream(
    byteArrayOutputStream.toByteArray(), 0, byteArrayOutputStream.size());

    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    documentBuilderFactory.setNamespaceAware(true);
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    Document doc = documentBuilder.parse(bais);
    System.out.print("wssutil"+doc.getDocumentElement().getNodeName());
    return doc;
   }

}


import org.apache.axis.handlers.*;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.message.*;
import java.io.*;
import java.security.MessageDigest;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPElement;
import wss.*;
import org.w3c.dom.*;
import com.verisign.xpath.*;

public class tttt {
  public tttt() {
  }
  public static void main(String[] args) {
    try{WSSUtil wss=new WSSUtil();
    Document doc=wss.readXML("d://mm.xml");
    SOAPMessage msg=wss.convertDocumentToSOAPMessage(doc);
    XPath path=new XPath("//arg0");
    wss.encrypt(doc,"f:/client.keystore","JKS","changeit","Client",path);
    wss.writeXML(doc,new FileOutputStream("d://mm1.xml"));

    SOAPMessage msg1=wss.convertDocumentToSOAPMessage(doc);
    Document doc1=wss.convertSoapMessageToDocument(msg1);
   // Document doc1=WSSUtil.readXML("d://mm1.xml");
    wss.decrypt(doc1,"f:/client.keystore","JKS","changeit","Client","changeit");
    wss.writeXML(doc1,new FileOutputStream("d://mm2.xml"));

  }catch(Exception e){e.printStackTrace();}

  }

}

我所写的CNN框架 VS caffe

一个月前,自己模仿caffe实现了一个卷积神经网络的框架。 一个月前,自己模仿caffe实现了一个卷积神经网络的框架。 相同点 1无缝支持CPU和GPU模式,GPU模式使用...
  • linger2012liu
  • linger2012liu
  • 2014年07月25日 19:19
  • 8174

基于DES加密的TCP聊天程序

近闻多大牛写博客已出书,虽才疏学浅,不求著书立说,但求面试官一问,答曰:吾于CSDN发表数篇博文,多热评,又选得《网络安全》一课,于图书馆觅得《网络安全高级软件编程技术》一书,兴趣饶然,乃写此文,有连...
  • u014004264
  • u014004264
  • 2016年03月20日 12:55
  • 1255

基于OpenSSL自建CA和颁发SSL证书

关于SSL/TLS介绍见文章 SSL/TLS原理详解。 关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 。 openssl是一个开源程序的套件、这个...
  • leolewin
  • leolewin
  • 2015年09月16日 14:15
  • 1661

如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?

要服务端同时支持ws与wss并不容易,其难点主要在于:wss通道必须在TCP连接刚建立时(收发消息前)就要先进行SSL加密,否则,后续的通信将无法正常进行。如此一来,当TCP连接刚建立时,服务器就无法...
  • zhuweisky
  • zhuweisky
  • 2017年11月17日 10:51
  • 564

有关于 WSS4J加密

首先来段百度百科 WSS4J WSS4J实现了WS-Security,是AXIS的安全模块,但也可以用于其他Web Services框架(例如XFIRE,CXF)。 WSS4J在...
  • m0_37357607
  • m0_37357607
  • 2017年04月26日 15:02
  • 161

wss加密在java下的小工具

  • 2008年08月29日 14:01
  • 580KB
  • 下载

WSS4J 1.5和1.6中实现WS Security的Merlin配置上的差异以及其它

通过org.apache.ws.security.components.crypto.Merlin来实现对客户端发出的报文进行WSS加密,在1.6以后的版本中,client_sign.properti...
  • fenglibing
  • fenglibing
  • 2013年06月04日 15:43
  • 2895

微信小程序下nginx代理wss,实现兼容原本服务协议ws,Java版本

开始前说明微信小程序如果使用webSocket协议的话,那么按照官网上的要求是必须使用了wss协议,使用了一个框架,不支持wss,所以后面用nginx代理解决了这个问题,接下来上代码软件列表 我使用的...
  • Jack______
  • Jack______
  • 2017年07月27日 10:06
  • 1112

Cxf+wss4j的WS-Security实现【未验证】

文章来源:http://blog.csdn.net/wangchsh2008/article/details/6708270 最近一个项目预研,需要使用webservice,进行消息...
  • buster2014
  • buster2014
  • 2015年07月18日 14:20
  • 665

Spring 3.0.5 + CXF 2.4 + Hibernate 3.6.0 + MySQL 5.5 整合(CXF/Spring/Hibernate)实现简单的WSS4J认证 + 测试

最近公司要做一个WebService项目,做了一个简单的例子,WebService认证使用的是简单的UsernameToken方式未使用X.509方式,DAO类大家自己去实现吧,这里就不...
  • shibingli
  • shibingli
  • 2011年05月10日 09:49
  • 1986
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我自己的基于versign实现的wss加密
举报原因:
原因补充:

(最多只允许输入30个字)