JAVA DES加密(DES/ECB/PKCS5Padding)和C#加密對應設置


  最近在項目中需要做java中DES加密和C#DES的對應設置,java代碼如下所示:

  

public static String encryptDES(String paramString1, String paramString2)
      throws Exception
    {
      
      SecretKeySpec localSecretKeySpec = new SecretKeySpec(paramString2.getBytes(), "DES");
      Cipher localCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
      localCipher.init(1, localSecretKeySpec);
      return Base64.encode(localCipher.doFinal(paramString1.getBytes()));
    }

 

  網上搜到的C#對應都是如下所示:

  

 public static string Encrypt(string pToEncrypt, string sKey)
        {
            using (DESCryptoServiceProvider des =
            new DESCryptoServiceProvider())
            {
               
                byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);
                
                des.Key = Encoding.UTF8.GetBytes(sKey);
                des.IV = Encoding.UTF8.GetBytes(sKey);
                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 base64 = Convert.ToBase64String(ms.ToArray());
                ms.Close();
                return base64 ;
            }
        }

  折騰了大半天,修改編碼格式,研究了下C#Encoding.UTF8.GetBytes()和java 的getBytes()差別,加密的值都對不上;

  好好看了下java的代碼相關,注意到下面這句代碼:

  Cipher.getInstance("DES/ECB/PKCS5Padding");

  搜索相關,java的PKCS5Padding 對應C#的des.Padding = PaddingMode.PKCS7;但是結果還是對應不上。

  一直沒注意到ECB 還需要設置C#的des.Mode = CipherMode.ECB;

  被這種小問題折騰半天,記錄一下;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM