C# Java 加密解密

C# AES加密解密

 1         public static string Encrypt(string key, string clearText)
 2         {
 3             byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
 4             using (Aes encryptor = Aes.Create())
 5             {
 6                 Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(key, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64 });
 7                 encryptor.Key = pdb.GetBytes(32);
 8                 encryptor.IV = pdb.GetBytes(16);
 9                 using (MemoryStream ms = new MemoryStream())
10                 {
11                     using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
12                     {
13                         cs.Write(clearBytes, 0, clearBytes.Length);
14                         cs.Close();
15                     }
16                     clearText = Convert.ToBase64String(ms.ToArray());
17                 }
18             }
19             return clearText;
20         }
21         public static string Decrypt(string key, string cipherText)
22         {
23             cipherText = cipherText.Replace(" ", "+");
24             byte[] cipherBytes = Convert.FromBase64String(cipherText);
25             using (Aes encryptor = Aes.Create())
26             {
27                 Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(key, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64 });
28                 encryptor.Key = pdb.GetBytes(32);
29                 encryptor.IV = pdb.GetBytes(16);
30                 using (MemoryStream ms = new MemoryStream())
31                 {
32                     using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
33                     {
34                         cs.Write(cipherBytes, 0, cipherBytes.Length);
35                         cs.Close();
36                     }
37                     cipherText = Encoding.Unicode.GetString(ms.ToArray());
38                 }
39             }
40             return cipherText;
41         }
AES加密解密

C# DES加密解密

        /// <summary>
        /// DES加密字符串
        /// </summary>
        /// <param name="encryptString">待加密的字符串
        /// <param name="encryptKey">加密密钥,要求为8位
        /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
        public static string EncryptDES(string encryptString, string encryptKey)
        {
            try
            {
                byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey);
                byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
                byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
                using (DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider())
                {
                    MemoryStream mStream = new MemoryStream();
                    using (CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write))
                    {
                        cStream.Write(inputByteArray, 0, inputByteArray.Length);
                        cStream.FlushFinalBlock();
                        return Convert.ToBase64String(mStream.ToArray());
                    }
                }
            }
            catch
            {
                return encryptString;
            }
        }

        /// <summary>
        /// DES解密字符串
        /// </summary>
        /// <param name="decryptString">待解密的字符串
        /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同
        /// <returns>解密成功返回解密后的字符串,失败返回空</returns>
        public static string DecryptDES(string decryptString, string decryptKey)
        {
            try
            {
                byte[] inputByteArray = Convert.FromBase64String(decryptString);
                byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
                byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    // 如果加密是没设置模式和填充,则解密也不需要设置
                    //des.Mode = CipherMode.ECB;
                    //des.Padding = PaddingMode.PKCS7;
                    MemoryStream mStream = new MemoryStream();
                    using (CryptoStream cStream = new CryptoStream(mStream, des.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write))
                    {
                        cStream.Write(inputByteArray, 0, inputByteArray.Length);
                        cStream.FlushFinalBlock();
                    }
                    return Encoding.UTF8.GetString(mStream.ToArray());
                }
            }
            catch (Exception e)
            {
                return string.Empty; ;
            }
        }
DES加密解密

Java DES加密

    public String encryptString(String str,String strKey) {

        DESKeySpec dks = new DESKeySpec(strKey.getBytes("UTF-8"));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME);
        Key key =  keyFactory.generateSecret(dks);

        // 这里指定了CBC模式. 如果是Cipher.getInstance("DES")则是EBC模式
        Cipher encryptCipher = Cipher.getInstance("DES/ECB/PKCS5Padding",BouncyCastleProvider.PROVIDER_NAME);
        encryptCipher.init(Cipher.ENCRYPT_MODE, key);

        return new String(Base64.encodeBase64(encryptCipher.doFinal(str.getBytes("UTF-8")),    true), "UTF-8").replaceAll("
", "");
    }
View Code

DES加密解密

注:

1、Java和C#通用时,需要注意如果Java是ECB模式,则C#也需要设模式为ECB。des.Mode = CipherMode.ECB;

2、如果没有设置偏移量,则偏移量默认为加密Key

3、如果Java中指定填充方式为PKCS5Padding,对应的C#的填充方式为PKCS7Padding。des.Padding = PaddingMode.PKCS7;

原文地址:https://www.cnblogs.com/gaozejie/p/5088543.html