zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    如何做一个快乐的人
    嵌入式实时操作系统的可裁剪性及其实现
    Hello China操作系统运行截图(完整版)
    物联网操作系统的概念和特点
    Windows Phone 31日谈——第4日:设备方向
    Windows Phone 31日谈——第6日:工具栏
    Windows Phone 31 日谈——第8日:选择器
    Windows Phone 31日谈——第5日:系统主题
    Windows Phone 31 日谈——第10日:输入范围和文本框
    Windows Phone 31 日谈——第13日:位置服务
  • 原文地址:https://www.cnblogs.com/gaozejie/p/5088543.html
Copyright © 2011-2022 走看看