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

📄 encrypt.java

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

import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.KeyGenerator;

import org.w3c.dom.Document;

import com.verisign.xmlenc.AlgorithmType;
import com.verisign.xmlenc.Encryptor;
import com.verisign.xmlenc.Decryptor;
import com.verisign.xmlsig.KeyInfo;
import com.verisign.xpath.XPath;
import com.verisign.xpath.XPathException;

public class Encrypt {
	public static void main(String args[]){
		Encrypt en = new Encrypt();

		//产生加密公钥,解密私钥
		KeyPair keypair = en.generateKayPair();
		Key publicKey = keypair.getPublic();
		Key privateKey = keypair.getPrivate();
		
		System.out.println(publicKey);
		System.out.println(privateKey);
		
		en.encryptXML("e://a.butte", "/UserBean/password","e://encryptResult.butte",publicKey);
		
		String[] ns = { "xenc", "http://www.w3.org/2001/04/xmlenc#" };
		String xPath = "/UserBean/xenc:EncryptedData";
		
		en.DecryptXML("e://encryptResult.butte",xPath,ns,"e://decryptResult.butte",privateKey);
	}
	/*产生密钥对*/
	public KeyPair generateKayPair(){
		KeyPair keypair = null;
		try {
			//取得一个实现了RSA算法的 KeyPairGenerator对象
			KeyPairGenerator pairgen = KeyPairGenerator.getInstance("RSA");
			//为 KeyPairGeoemtor对象提供密钥大小和—个随机数
			SecureRandom random = new SecureRandom();
			int keysize = 1024;
			pairgen.initialize(keysize, random);
			keypair = pairgen.generateKeyPair();
			//System.out.println("Key Pair Generated OK!");
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return keypair;
	}
	
	/*生成共享密钥*/
	public Key generateSharedKey(){
		KeyGenerator kg = null;
		Key key = null;
		try {
			//获得一个实现了Tripie—DES算法的 KeyGenerator 对象。 
			kg = KeyGenerator.getInstance("DESede");
			//对KeyGenerator对象调用generateKey方法获取共享 密钥 
			key = kg.generateKey();
			//System.out.println("Shared Key Generated OK!");
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return key;
	}
	
	public void encryptXML(String inputfilename,String xPath,String outputfilename,Key publicKey){
		
		//产生共享密钥
		Key key = this.generateSharedKey();
		//将需要转化的xml文件转换为DOM对象
		TransformingBetweenDOMandXML transform = new TransformingBetweenDOMandXML();
		Document doc = transform.XMLtoDOM(inputfilename);
		//设置XML加密规范中数据加密的密钥类型 
		AlgorithmType dataEncriptionAlgoType = AlgorithmType.TRIPLEDES;
		//设置XML加密规范中密钥加密的密钥类型
		AlgorithmType keyEncriptAlgoType = AlgorithmType.RSA1_5;
		//创建有关密钥的信息
		KeyInfo keyInfo = new KeyInfo();
		//创建 Encryptor对象
		Encryptor enc = null;
		try {
			enc = new Encryptor(  doc ,
					key,
					dataEncriptionAlgoType,
					publicKey,
					keyEncriptAlgoType,
					keyInfo
					);
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		XPath xpath = new XPath(xPath);
		try {
			enc.encryptInPlace(xpath);
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (XPathException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		transform.DOMtoXML(doc,outputfilename);
	}
	
	public void DecryptXML(String inputfilename,String xPath,String[] ns,String outputfilename,Key privateKey){
		
		//将需要转化的xml文件转换为DOM对象
		TransformingBetweenDOMandXML transform = new TransformingBetweenDOMandXML();
		Document doc = transform.XMLtoDOM(inputfilename);
		
		//创建 Decryptor对象
		Decryptor dec = null;
		XPath xpath = new XPath(xPath,ns);
		
		try {
			dec = new Decryptor(doc, privateKey, xpath);
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			dec.decryptInPlace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (XPathException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		transform.DOMtoXML(doc,outputfilename);
	}
	
}

⌨️ 快捷键说明

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