天天看點

.Net使用DES解密發生“資料不正确”的錯誤

發生這種錯誤,一般是由于加密階段,沒有将密文的流資料完整輸出,如果沿着解密的方向排查錯誤,多半是出錯了,舉例如下

    using (MemoryStream ms = new MemoryStream())
    using (CryptoStream cryStream 
         = new CryptoStream(ms, cryptoProvider.CreateEncryptor(), CryptoStreamMode.Write))
    {
        cryStream.Write(source, 0, source.Length);
          byte[] result = ms.ToArray();
          return result;
    }            

上述代碼,執行ms.ToArray()時,很大的幾率,輸出的密文位元組數組是不完整的,就是說cryStream沒有将所有資料寫入ms。是以在ms.ToArray之前,調用

ms.Close(), 或是将 CryptoStream的對象再嵌套一個using,如下

    using (MemoryStream ms = new MemoryStream())
    {
          using (CryptoStream cryStream 
             = new CryptoStream(ms, cryptoProvider.CreateEncryptor(), CryptoStreamMode.Write))
        	  {
        	      cryStream.Write(source, 0, source.Length);
        	  }
        	  byte[] result = ms.ToArray();
        	  return result;
    }