当前位置:编程学习 > JAVA >>

一个java的DES加解密类转换成C#

一个java的des加密解密代码如下:


 

//package com.visionsky.util;  
 
import java.security.*; 
//import java.util.regex.Pattern;  
//import java.util.Hashtable;  
import javax.crypto.*; 
import javax.crypto.spec.*; 
 
import sun.misc.*; 
 
/**
 * des加密解密
 */ 
public class DESPlus { 
    private static String strDefaultKey = "PLFP"; //默认密钥  
 
    private static final byte[] iv = {0x12, 0x34, 0x56, 0x78, (byte) 0x90, (byte) 0xab, (byte) 0xcd, (byte) 0xef};//des 向量  
 
    private static BASE64Encoder enc = new BASE64Encoder();//将byte[]转换成String  
 
    private static BASE64Decoder dec = new BASE64Decoder(); //将String转换成byte[]  
 
    /**
     * 加密字节数组
     *
     * @param arrB
     *            需加密的字节数组
     * @param key
     *            密钥
     * @return 加密后的字节数组
     * @throws Exception
     */ 
    public static byte[] encrypt(byte[] arrB, String key) throws Exception { 
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes()); 
 
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec); 
        IvParameterSpec ivp = new IvParameterSpec(DESPlus.iv); 
 
        Cipher encryptCipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); 
        encryptCipher.init(Cipher.ENCRYPT_MODE, secretKey, ivp); 
 
        return encryptCipher.doFinal(arrB); 
    } 
 
    /**
     * 加密字符串
     *
     * @param xml
     *            需加密的字符串
     * @param key
     *            密钥
     * @return 加密后的字符串
     * @throws Exception
     */ 
    public static String encrypt(String xml, String key) throws Exception { 
        //return DESPlus.enc.encode(encrypt(xml.getBytes(), key));  
    return new String(encrypt(xml.getBytes(), key));  
    } 
 
    /**
     * 使用默认公钥加密字符串
     * @param xml 需加密的字符串
     * @return 加密后的字符串
     * @throws Exception
     */ 
    public static String encrypt(String xml) throws Exception { 
        return encrypt(xml, strDefaultKey); 
    } 
 
    /**
     * 解密字节数组
     *
     * @param arrB
     *            需解密的字节数组
     * @param key
     *            密钥
     * @return 解密后的字节数组
     * @throws Exception
     */ 
    public static byte[] decrypt(byte[] arrB, String key) throws Exception { 
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes()); 
 
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec); 
        IvParameterSpec ivp = new IvParameterSpec(DESPlus.iv); 
 
        Cipher decryptCipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); 
        decryptCipher.init(Cipher.DECRYPT_MODE, secretKey, ivp); 
 
        return decryptCipher.doFinal(arrB); 
    } 
 
    /**
     * 解密字符串
     *
     * @param xml
     *            需解密的字符串
     * @param key
     *            密钥
     * @return 解密后的字符串
     * @throws Exception
     */ 
    public static String decrypt(String xml, String key) throws Exception { 
        return new String(decrypt(DESPlus.dec.decodeBuffer(xml), key)); 
    } 
 
    /**
     * 使用默认公钥解密字符串
     * @param xml 需解密的字符串
     * @return 解密后的字符串
     * @throws Exception
     */ 
    public static String decrypt(String xml) throws Exception { 
        return decrypt(xml, strDefaultKey); 
    } 
 
    /**
     * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位
     *
     * @param arrBTmp
     *            构成该字符串的字节数组
     * @return 生成的密钥
     * @throws java.lang.Exception
     */ 
    private Key getKey(byte[] arrBTmp) throws Exception { 
        // 创建一个空的8位字节数组(默认值为0)  
        byte[] arrB = new byte[8]; 
 
        // 将原始字节数组转换为8位  
        for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) { 
            arrB[i] = arrBTmp[i]; 
        } 
 
        // 生成密钥  
        Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES"); 
 
        return key; 
    } 
 
    /**
     * 获取默认密钥
     * @return
     */ 
    public static String getDesKey() { 
        return DESPlus.strDefaultKey; 
    } 
 
    public static void main(String[] args) { 
        try { 
            //测试密匙  
            String key = "BOC_PLFP"; 
            //004交易案例  
            String xml = "<?xml version=\"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); 
            System.out.println("加密前的字符串:" + xml); 
            System.out.println("加密前的字符串长度:" + xml.getBytes().length); 
 
            //加密  
            xml = DESPlus.encrypt(xml, key); 
            System.out.println("加密后的字符串:" + xml); 
            System.out.println("加密后的字符串长度:" + xml.getBytes().length); 
 
            //解密  
            xml = DESPlus.decrypt(xml, key); 
            System.out.println("解密后的字符串:" + xml); 
            System.out.println("解密后的字符串长度:" + xml.getBytes().length); 
 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
} 

//package com.visionsky.util;

import java.security.*;
//import java.util.regex.Pattern;
//import java.util.Hashtable;
import javax.crypto.*;
import javax.crypto.spec.*;

import sun.misc.*;

/**
 * des加密解密
 */
public class DESPlus {
    private static String strDefaultKey = "PLFP"; //默认密钥

    private static final byte[] iv = {0x12, 0x34, 0x56, 0x78, (byte) 0x90, (byte) 0xab, (byte) 0xcd, (byte) 0xef};//des 向量

    private static BASE64Encoder enc = new BASE64Encoder();//将byte[]转换成String

    private static BASE64Decoder dec = new BASE64Decoder(); //将String转换成byte[]

    /**
     * 加密字节数组
     *
     * @param arrB
     *            需加密的字节数组
     * @param key
     *            密钥
     * @return 加密后的字节数组
     * @throws Exception
     */
    public static byte[] encrypt(byte[] arrB, String key) throws Exception {
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());

        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
        IvParameterSpec ivp = new IvParameterSpec(DESPlus.iv);

        Cipher encryptCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        encryptCipher.init(Cipher.ENCRYPT_MODE, secretKey, ivp);

        return encryptCipher.doFinal(arrB);
    }

    /**
     * 加密字符串
     *
     * @param xml
     *            需加密的字符串
     * @param key
     *            密钥
     * @return 加密后的字符串
     * @throws Exception
     */
    public static String encrypt(String xml, String key) throws Exception {
        //return DESPlus.enc.encode(encrypt(xml.getBytes(), key));
 return new String(encrypt(xml.getBytes(), key));
    }

    /**
     * 使用默认公钥加密字符串
     * @param xml 需加密的字符串
     * @return 加密后的字符串
     * @throws Exception
     */
    public static String encrypt(String xml) throws Exception {
        return encrypt(xml, strDefaultKey);
    }

    /**
     * 解密字节数组
     *
     * @param arrB
     *            需解密的字节数组
     * @param key
     *            密钥
     * @return 解密后的字节数组
     * @throws Exception
     */
    public static byte[] decrypt(byte[] arrB, String key) throws Exception {
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,