一、对于xml文件或java源码(或其他文件)中需要保密的数据(如帐户密码等)可采用多种加密算法加密。目前的加密算法很多:DES(数字加密标准)是始于1977年的一种对等加密算法。
DES算法描述:
DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个:Key、Data 、Mode。其中Key为8个字节共64位,是DES算法的工作密钥(公钥);Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
DES算法工作流程如下:若Mode为加密模式,则利用Key 对数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密模式,则利用Key对密码形式的数据Data进行解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据在公共通信网中传输的安全性和可靠性。
二、XML 加密为需要结构化数据安全交换的应用程序提供了一种端到端安全性。XML 本身是对数据进行结构化最流行的技术。传输层安全性(Transport Layer Security(TLS))是因特网上安全通信的事实标准。TLS 是继著名的安全套接字层(SSL)之后的端到端安全性协议。它提供了通信双方之间的端到端安全性会话。XML 加密(XML Encryption)无意替换或取代 SSL/TLS。相反,它提供了用于 SSL 未涵盖的安全性需求的机制。以下是两个 SSL 未涉及的重要领域:
- 加密交换数据的一部分
- 多方(不止两方)之间的安全会话
可以对xml整个文件或单个元素或非xml数据进行加密,以下是非加密xml文件和对单个元素的加密后的xml文件示例:
加密前:
<purchaseOrder>
<Order>
<Item>book</Item>
<Id>123-958-74598</Id>
<Quantity>12</Quantity>
</Order>
<Payment>
<CardId>123654-8988889-9996874</CardId>
<CardName>visa</CardName>
<ValidDate>12-10-2004</ValidDate>
</Payment>
</purchaseOrder>
加密后:
<?xml version='1.0' ?>
<PurchaseOrder>
<Order>
<Item>book</Item>
<Id>123-958-74598</Id>
<Quantity>12</Quantity>
</Order>
<EncryptedData Type='http://www.w3.org/2001/04/xmlenc#Element'
xmlns='http://www.w3.org/2001/04/xmlenc#'>
<CipherData>
<CipherValue>A23B45C564587</CipherValue>
</CipherData>
</EncryptedData>
</PurchaseOrder>
三、xml文件加密源码实现
.NET的所有加密和解密是通过CryptoStream类来处理,它衍生自System.IO.Stream。NET构架从基本的SymmetricAlgorithm类扩展出来四种算法:
·System.Security.Cryptography.DES
·System.Security.Cryptography.TripleDES
·System.Security.Cryptography.RC2
·System.Security.Cryptography.Rijndael
java实现xml加密:
由于目前jdk版本对w3c的xml加密标准支持不够(jsp在开发完善中),可采用apache的Xsec基于sun的JCE来实现xml文件的加密解密。
四、字符串或文件的DES加密解密
基于MS的CryptoAPI 实现字符串或文件的DES加密解密,当然,加密算法可以选择。CryptoAPI共有五部分组成:简单消息函数(Simplified Message Functions)、低层消息函数(Low-level Message Functions)、基本加密函数(Base Cryptographic Functions)、证书编解码函数(Certificate Encode/Decode Functions)和证书库管理函数(Certificate Store Functions)。其中前三者可用于对敏感信息进行加密或签名处理,可保证网络传输信心的私有性;后两者通过对证书的使用,可保证网络信息交流中的认证性。
CSP(cryptographic service provider):
CSP是真正实行加密的独立模块,他既可以由软件实现也可以由硬件实现。但是它必须符合CryptoAPI接口的规范。CSP详细信息见HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Cryptography/Defaults/Provider
下面简要列出各个CSP所含算法(不全):
CSP名称 + 类型
提供者描述
算法列表
MS_DEF_PROV + PROV_RSA_FULL
Microsoft Base Cryptographic Provider v1.0
Name:RC2 Type:Encrypt Bits:40 Algid:00006602h
Name:RC4 Type:Encrypt Bits:40 Algid:00006801h
Name:DES Type:Encrypt Bits:56 Algid:00006601h
Name:SHA-1 Type:Hash Bits:160 Algid:00008004h
Name:MD2 Type:Hash Bits:128 Algid:00008001h
Name:MD4 Type:Hash Bits:128 Algid:00008002h
Name:MD5 Type:Hash Bits:128 Algid:00008003h
Name:SSL3 SHAMD5 Type:Hash Bits:288 Algid:00008008h
Name:MAC Type:Hash Bits:0 Algid:00008005h
Name:RSA_SIGN Type:Signature Bits:512 Algid:00002400h
Name:RSA_KEYX Type:Exchange Bits:512 Algid:0000a400h
Name:HMAC Type:Hash Bits:0 Algid:00008009h
MS_ENHANCED_PROV + PROV_RSA_FULL
Microsoft Enhanced Cryptographic Provider v1.0
Name:RC2 Type:Encrypt Bits:128 Algid:00006602h
Name:RC4 Type:Encrypt Bits:128 Algid:00006801h
Name:DES Type:Encrypt Bits:56 Algid:00006601h
Name:3DES TWO KEY Type:Encrypt Bits:112 Algid:00006609h
Name:3DES Type:Encrypt Bits:168 Algid:00006603h
Name:SHA-1 Type:Hash Bits:160 Algid:00008004h
Name:MD2 Type:Hash Bits:128 Algid:00008001h
Name:MD4 Type:Hash Bits:128 Algid:00008002h
Name:MD5 Type:Hash Bits:128 Algid:00008003h
Name:SSL3 SHAMD5 Type:Hash Bits:288 Algid:00008008h
Name:MAC Type:Hash Bits:0 Algid:00008005h
Name:RSA_SIGN Type:Signature Bits:1024 Algid:00002400h
Name:RSA_KEYX Type:Exchange Bits:1024 Algid:0000a400h
Name:HMAC Type:Hash Bits:0 Algid:00008009h
MS_STRONG_PROV + PROV_RSA_FULL
Microsoft Strong Cryptographic Provider
Name:RC2 Type:Encrypt Bits:128 Algid:00006602h
。。。。。。
MS_DEF_RSA_SCHANNEL_PROV + PROV_RSA_SCHANNEL
Microsoft RSA SChannel Cryptographic Provider
Name:RC2 Type:Encrypt Bits:128 Algid:00006602h
。。。。。。
MS_DEF_DSS_PROV + PROV_DSS
Microsoft Base DSS Cryptographic Provider
Name:SHA-1 Type:Hash Bits:160 Algid:00008004h
。。。。。。
MS_DEF_DSS_DH_PROV + PROV_DSS_DH
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
Name:CYLINK MEK Type:Encrypt Bits:40 Algid:0000660ch
。。。。。。
MS_ENH_DSS_DH_PROV + PROV_DSS_DH
Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider
Name:CYLINK MEK Type:Encrypt Bits:40 Algid:0000660ch
。。。。。。
MS_DEF_DH_SCHANNEL_PROV + PROV_DH_SCHANNEL
Microsoft DH SChannel Cryptographic Provider
Name:CYLINK MEK Type:Encrypt Bits:40 Algid:0000660ch
。。。。。。
MS_ENH_RSA_AES_PROV + PROV_RSA_AES
Microsoft Enhanced RSA and AES Cryptographic Provider
Name:RC2 Type:Encrypt Bits:128 Algid:00006602h
。。。。。。
参考文档:
1、微软之——“用对称密钥对 XML 元素进行加密”(http://msdn2.microsoft.com/zh-cn/library/sb7w85t6.aspx)
2、DES标准http://www.itl.nist.gov/fipspubs/fip46-2.htm
3、http://dev.yesky.com/266/2010266_1.shtml
4、http://www-128.ibm.com/developerworks/cn/xml/x-encrypt/index.html