Java和.net加密解密互通DES

Java代碼:

public static String encrypt(String data, String key) throws Exception {
		Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); 
		 
        DESKeySpec desKeySpec = new DESKeySpec(key.substring(0, 8).getBytes("UTF-8")); 
 
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec); 
        IvParameterSpec iv = new IvParameterSpec(key.substring(0, 8).getBytes("UTF-8")); 
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv); 
 
        return new BASE64Encoder().encode(cipher.doFinal(data.getBytes("UTF-8"))); 
	}

public static String decrypt(String data, String key) throws IOException,
		Exception {
	if (data == null)
		return "";
	BASE64Decoder decoder = new BASE64Decoder();

	Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

	DESKeySpec desKeySpec = new DESKeySpec(key.substring(0, 8).getBytes(
			"UTF-8"));

	SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
	SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
	IvParameterSpec iv = new IvParameterSpec(key.substring(0, 8).getBytes(
			"UTF-8"));
	cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
	byte[] retByte = cipher.doFinal(decoder.decodeBuffer(data));
	return new String(retByte);
}


.net代碼:

public static string DESEncrypt(string data, string desKey)
        {
            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            {
                byte[] inputByteArray = Encoding.UTF8.GetBytes(data);
                des.Key = Encoding.UTF8.GetBytes(desKey.Substring(0, 8));
                des.IV = Encoding.UTF8.GetBytes(desKey.Substring(0, 8));
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    cs.Close();
                }
                string str = Convert.ToBase64String(ms.ToArray());
                ms.Close();
                return str;
            }
        }

        public static string DESDecrypt(string encryedData, string desKey)
        {
            byte[] inputByteArray = Convert.FromBase64String(encryedData);
            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            {
                des.Key = Encoding.UTF8.GetBytes(desKey.Substring(0, 8));
                des.IV = Encoding.UTF8.GetBytes(desKey.Substring(0, 8));
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    cs.Close();
                }
                string str = Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();
                return str;
            }
        } 

注意:1.Java密鑰爲8字節,或8的倍數。

    2.只支持加密字符串爲128位以內的字符加密,如果超過128位要分段進行加密



發佈了32 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章