一个java的DES加解密类转换成C#文档格式.docx
《一个java的DES加解密类转换成C#文档格式.docx》由会员分享,可在线阅读,更多相关《一个java的DES加解密类转换成C#文档格式.docx(16页珍藏版)》请在冰点文库上搜索。
privatestaticfinalbyte[]iv={0x12,0x34,0x56,0x78,(byte)0x90,(byte)0xab,(byte)0xcd,(byte)0xef};
//des向量
privatestaticBASE64Encoderenc=newBASE64Encoder();
//将byte[]转换成String
privatestaticBASE64Decoderdec=newBASE64Decoder();
//将String转换成byte[]
*加密字节数组
*
*@paramarrB
*
需加密的字节数组
*@paramkey
密钥
*@return加密后的字节数组
*@throwsException
publicstaticbyte[]encrypt(byte[]arrB,Stringkey)throwsException{
DESKeySpecdesKeySpec=newDESKeySpec(key.getBytes());
SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("
DES"
);
SecretKeysecretKey=keyFactory.generateSecret(desKeySpec);
IvParameterSpecivp=newIvParameterSpec(DESPlus.iv);
CipherencryptCipher=Cipher.getInstance("
DES/CBC/PKCS5Padding"
encryptCipher.init(Cipher.ENCRYPT_MODE,secretKey,ivp);
returnencryptCipher.doFinal(arrB);
}
*加密字符串
*@paramxml
需加密的字符串
*@return加密后的字符串
publicstaticStringencrypt(Stringxml,Stringkey)throwsException{
//returnDESPlus.enc.encode(encrypt(xml.getBytes(),key));
returnnewString(encrypt(xml.getBytes(),key));
*使用默认公钥加密字符串
*@paramxml需加密的字符串
publicstaticStringencrypt(Stringxml)throwsException{
returnencrypt(xml,strDefaultKey);
*解密字节数组
需解密的字节数组
*@return解密后的字节数组
publicstaticbyte[]decrypt(byte[]arrB,Stringkey)throwsException{
CipherdecryptCipher=Cipher.getInstance("
decryptCipher.init(Cipher.DECRYPT_MODE,secretKey,ivp);
returndecryptCipher.doFinal(arrB);
*解密字符串
需解密的字符串
*@return解密后的字符串
publicstaticStringdecrypt(Stringxml,Stringkey)throwsException{
returnnewString(decrypt(DESPlus.dec.decodeBuffer(xml),key));
*使用默认公钥解密字符串
*@paramxml需解密的字符串
publicstaticStringdecrypt(Stringxml)throwsException{
returndecrypt(xml,strDefaultKey);
*从指定字符串生成密钥,密钥所需的字节数组长度为8位不足8位时后面补0,超出8位只取前8位
*@paramarrBTmp
构成该字符串的字节数组
*@return生成的密钥
*@throwsjava.lang.Exception
privateKeygetKey(byte[]arrBTmp)throwsException{
//创建一个空的8位字节数组(默认值为0)
byte[]arrB=newbyte[8];
//将原始字节数组转换为8位
for(inti=0;
i<
arrBTmp.length&
&
arrB.length;
i++){
arrB[i]=arrBTmp[i];
//生成密钥
Keykey=newjavax.crypto.spec.SecretKeySpec(arrB,"
returnkey;
*获取默认密钥
*@return
publicstaticStringgetDesKey(){
returnDESPlus.strDefaultKey;
publicstaticvoidmain(String[]args){
try{
//测试密匙
Stringkey="
BOC_PLFP"
//004交易案例
Stringxml="
<
?
xmlversion=\"
1.0\"
encoding=\"
UTF-8\"
>
ROOT>
HEADER>
TRANNO>
004<
/TRANNO>
BNKNO>
17850<
/BNKNO>
COMNO>
COM01<
/COMNO>
SN>
1109141222222660161<
/SN>
/HEADER>
BODY>
TRANLOG>
APPNO>
0000000123<
/APPNO>
NOTATION>
客户信息不完整,请补充资料。
/NOTATION>
/TRANLOG>
/BODY>
/ROOT>
"
System.out.println("
密钥:
+key);
加密前的字符串:
+xml);
加密前的字符串长度:
+xml.getBytes().length);
//加密
xml=DESPlus.encrypt(xml,key);
加密后的字符串:
加密后的字符串长度:
//解密
xml=DESPlus.decrypt(xml,key);
解密后的字符串:
解密后的字符串长度:
}catch(Exceptione){
e.printStackTrace();
*解密字符串
//生成密钥
上面运行结果为:
密钥:
BOC_PLFP
加密前的字符串:
xmlversion="
1.0"
encoding="
UTF-8"
加密前的字符串长度:
262
加密后的字符串:
bE5N44gjyfO3SdUs6/OhVg4I4l725S2vWcKBRxYOAd/eAnyuADKXeNNgVXJMj3aJJzndntv364rh
YW2bF33lmEABMU43HfS8DcXX7+QrcIjp3mrk7uJdiNHu4T4oHMeqetFZqU5oh2XY1sbBPPdGEgMf
/OguRVaTblzl/ylkFc6C9BNNSD0IwL0Ks7Mi73+V76P+aFdPgXQc7u4Vkq8Cd6+HgHErbHbJI729
JPJKM5L2YAAW4Q06oi4yMoEASDjYf7Aa1X/FWqclsZImSDB0okGOiuj857l94BM1zYl2RtWdXa9o
0beiL4CbEvKSC3U3PydAI0+mZbtE0sVkyP0sXTke7ifrwiMG
加密后的字符串长度:
360
解密后的字符串:
解密后的字符串长度:
262,修改里面的des向量iv,字符编码UTF8为Default等,最终改写为C#代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;