欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA、C# DES通用加解密

程序员文章站 2024-03-14 10:48:40
...

原文:http://www.cnblogs.com/Alex80/p/5261710.html

JAVA用DES加密C#用DES解密的实现,C#用DES加密JAVA用DES解密(保持key一致)
JAVA code:

    //加密
    public static String encrypt(String value,String key) {
        String result = "";
        try {
            value = java.net.URLEncoder.encode(value, "utf-8");
            result = toHexString(encryptTmp(value, key)).toUpperCase();
        } catch (Exception ex) {
            ex.printStackTrace();
            return "";
        }
        return result;
    }

    // 解密
    public static String decrypt(String message, String key) throws Exception {

        byte[] bytesrc = convertHexString(message);
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
        IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
        cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
        byte[] retByte = cipher.doFinal(bytesrc);
        return new String(retByte);
    }

    public static byte[] encryptTmp(String message, String key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
        IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
        return cipher.doFinal(message.getBytes("UTF-8"));
    }

    public static byte[] convertHexString(String ss) {
        byte digest[] = new byte[ss.length() / 2];
        for (int i = 0; i < digest.length; i++) {
            String byteString = ss.substring(2 * i, 2 * i + 2);
            int byteValue = Integer.parseInt(byteString, 16);
            digest[i] = (byte) byteValue;
        }
        return digest;
    }

    public static String toHexString(byte b[]) {
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            String plainText = Integer.toHexString(0xff & b[i]);
            if (plainText.length() < 2)
                plainText = "0" + plainText;
            hexString.append(plainText);
        }
        return hexString.toString();
    }

C# code:

public static string Encode(string str, string key)  
{  
    try  
    {  
        DESCryptoServiceProvider provider = new DESCryptoServiceProvider();  
        provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, 8));  
        provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, 8));  
        byte[] bytes = Encoding.GetEncoding("GB2312").GetBytes(str);  
        MemoryStream stream = new MemoryStream();  
        CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);  
        stream2.Write(bytes, 0, bytes.Length);  
        stream2.FlushFinalBlock();  
        StringBuilder builder = new StringBuilder();  
        foreach (byte num in stream.ToArray())  
        {  
            builder.AppendFormat("{0:X2}", num);  
        }  
        stream.Close();  
        return builder.ToString();  
    }  
    catch (Exception) { return "xxxx"; }  
}

public static string Decode(string str, string key)  
{  
    try  
    {  
        DESCryptoServiceProvider provider = new DESCryptoServiceProvider();  
        provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, 8));  
        provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, 8));  
        byte[] buffer = new byte[str.Length / 2];  
        for (int i = 0; i < (str.Length / 2); i++)  
        {  
            int num2 = Convert.ToInt32(str.Substring(i * 2, 2), 0x10);  
            buffer[i] = (byte)num2;  
        }  
        MemoryStream stream = new MemoryStream();  
        CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write);  
        stream2.Write(buffer, 0, buffer.Length);  
        stream2.FlushFinalBlock();  
        stream.Close();  
        return Encoding.GetEncoding("GB2312").GetString(stream.ToArray());  
    }  
    catch (Exception) { return ""; }  
}

上一篇: 对称加密-DES解密

下一篇: