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