免费男女视频_国产系列 视频二区_羞羞视频免费入口网站_久国久产久精永久网页_国产免费观看av_一区二区三区日韩在线观看

C#加解密算法

加密解密算法目前已經應用到我們生活中的各個方面

加密用于達到以下目的:

  • 保密性:幫助保護用戶的標識或數據不被讀取。

  • 數據完整性:幫助保護數據不被更改。

  • 身份驗證:確保數據發自特定的一方。

  • 不可否認性:防止特定的一方否認發送過消息。

為了達到這些目的,我們可以使用以下做法:

私鑰加密(對稱加密)

對數據執行轉換,使第三方無法讀取該數據。 此類型的加密使用單個共享的機密密鑰來加密和解密數據。

公鑰加密(不對稱加密)

對數據執行轉換,使第三方無法讀取該數據。 此類加密使用公鑰/私鑰對來加密和解密數據。

加密簽名

通過創建對特定方唯一的數字簽名來幫助驗證數據是否發自特定方。 此過程還使用哈希函數。

加密哈希

將數據從任意長度映射為定長字節序列。 哈希在統計上是唯一的;不同的雙字節序列不會哈希為同一個值。

.NET Framework 提供了以下類來實現私鑰加密算法:

.NET Framework 提供了以下類來實現公鑰加密算法:

.NET Framework 提供了以下類來實現數字簽名算法:

.NET Framework 提供的以下類實現了哈希算法:

System.Security.Cryptography 命名空間

 

  說明
公共類 Aes 表示高級加密標準 (AES) 的所有實現都必須從中繼承的抽象基類。
公共類 AesCryptoServiceProvider 使用高級加密標準 (AES) 算法的加密應用程序編程接口 (CAPI) 實現來執行對稱加密和解密。
公共類 AesManaged 提供高級加密標準 (AES) 對稱算法的托管實現。
公共類 AsnEncodedData 表示 Abstract Syntax Notation One (ASN.1) 編碼數據。
公共類 AsnEncodedDataCollection 表示 AsnEncodedData 對象的集合。 此類不能被繼承。
公共類 AsnEncodedDataEnumerator 提供在 AsnEncodedDataCollection 對象中導航的能力。 此類不能被繼承。
公共類 AsymmetricAlgorithm 表示所有非對稱算法的實現都必須從中繼承的抽象基類。
公共類 AsymmetricKeyExchangeDeformatter 表示所有非對稱密鑰交換反格式化程序均從中派生的基類。
公共類 AsymmetricKeyExchangeFormatter 表示所有非對稱密鑰交換格式化程序均從中派生的基類。
公共類 AsymmetricSignatureDeformatter 表示所有不對稱簽名反格式化程序實現均從中派生的抽象基類。
公共類 AsymmetricSignatureFormatter 表示所有不對稱簽名格式化程序實現均從中派生的基類。
公共類 CngAlgorithm 封裝加密算法的名稱。
公共類 CngAlgorithmGroup 封裝加密算法組的名稱。
公共類 CngKey 定義與下一代加密技術 (CNG) 對象一起使用的密鑰的核心功能。
公共類 CngKeyBlobFormat 指定與 Microsoft 下一代加密技術 (CNG) 對象一起使用的密鑰 BLOB 格式。
公共類 CngKeyCreationParameters 包含密鑰創建的高級屬性。
公共類 CngPropertyCollection 提供下一代加密技術 (CNG) 屬性的強類型集合。
公共類 CngProvider 封裝與下一代加密技術 (CNG) 對象一起使用的密鑰存儲提供程序 (KSP) 的名稱。
公共類 CngUIPolicy 為用戶界面 (UI) 封裝可選配置參數,當您訪問受保護的密鑰時,下一代加密技術 (CNG) 將顯示這些配置參數。
公共類 CryptoAPITransform 執行數據的加密轉換。 此類不能被繼承。
公共類 CryptoConfig 訪問加密配置信息。
公共類 CryptographicAttributeObject 包含一個類型和與該類型相關聯的值的集合。
公共類 CryptographicAttributeObjectCollection 包含 CryptographicAttributeObject 對象的集合。
公共類 CryptographicAttributeObjectEnumerator 為 CryptographicAttributeObjectCollection 集合提供枚舉功能。 此類不能被繼承。
公共類 CryptographicException 當加密操作中出現錯誤時引發的異常。
公共類 CryptographicUnexpectedOperationException 當加密操作中出現意外操作時引發的異常。
公共類 CryptoStream 定義將數據流鏈接到加密轉換的流。
公共類 CspKeyContainerInfo 提供有關加密密鑰對的附加信息。 此類不能被繼承。
公共類 CspParameters 包含傳遞給執行加密計算的加密服務提供程序 (CSP) 的參數。 此類不能被繼承。
公共類 DataProtector 提供數據保護程序的基類。
公共類 DeriveBytes 表示抽象基類,導出指定長度字節序列的所有類都從該基類繼承。
公共類 DES 表示所有 DES 實現都必須從中派生的數據加密標準 (DES) 算法的基類。
公共類 DESCryptoServiceProvider 定義訪問數據加密標準 (DES) 算法的加密服務提供程序 (CSP) 版本的包裝對象。 此類不能被繼承。
公共類 DpapiDataProtector 提供簡單數據保護方法。
公共類 DSA 表示所有數字簽名算法 (DSA) 的實現都必須從中繼承的抽象基類。
公共類 DSACryptoServiceProvider 定義訪問 DSA 算法的加密服務提供程序 (CSP) 實現的包裝對象。 此類不能被繼承。
公共類 DSASignatureDeformatter 驗證數字簽名算法 (DSA) PKCS#1 1.5 版簽名。
公共類 DSASignatureFormatter 創建數字簽名算法 (DSA) 簽名。
公共類 ECDiffieHellman 提供一個抽象基類,可以從它派生橢圓曲線 Diffie-Hellman (ECDH) 算法實現。 此類提供一個所有 ECDH 實現都必須支持的基本操作集。
公共類 ECDiffieHellmanCng 提供橢圓曲線 Diffie-Hellman (ECDH) 算法的下一代加密技術 (CNG) 實現。 此類用于執行加密操作。
公共類 ECDiffieHellmanCngPublicKey 指定與 ECDiffieHellmanCng 類一起使用的橢圓曲線 Diffie-Hellman (ECDH) 公鑰。
公共類 ECDiffieHellmanPublicKey 提供所有 ECDiffieHellmanCngPublicKey 實現必須從中繼承的抽象基類。
公共類 ECDsa 提供一個封裝橢圓曲線數字簽名算法 (ECDSA) 的抽象基類。
公共類 ECDsaCng 提供橢圓曲線數字簽名算法 (ECDSA) 的下一代加密技術 (CNG) 實現。
公共類 FromBase64Transform 從 Base 64 轉換 CryptoStream
公共類 HashAlgorithm 表示所有加密哈希算法實現均必須從中派生的基類。
公共類 HMAC 表示基于哈希的消息驗證代碼 (HMAC) 的所有實現必須從中派生的抽象類。
公共類 HMACMD5 計算基于哈希的消息身份驗證代碼 (HMAC) 使用 MD5 哈希函數,。
公共類 HMACRIPEMD160 計算基于哈希的消息身份驗證代碼 (HMAC) 使用 RIPEMD160 哈希函數,。
公共類 HMACSHA1 使用 SHA1 哈希函數計算基于哈希值的消息驗證代碼 (HMAC)。
公共類 HMACSHA256 使用 SHA256 哈希函數計算基于哈希值的消息驗證代碼 (HMAC)。
公共類 HMACSHA384 使用 SHA384 哈希函數計算基于哈希值的消息驗證代碼 (HMAC)。
公共類 HMACSHA512 使用 SHA512 哈希函數計算基于哈希值的消息驗證代碼 (HMAC)。
公共類 KeyedHashAlgorithm 顯示所有加密哈希算法實現均必須從中派生的抽象類。
公共類 KeySizes 確定對稱加密算法的有效密鑰大小設置。
公共類 MACTripleDES 使用 TripleDES 計算輸入數據 CryptoStream 的消息驗證代碼 (MAC)。
公共類 ManifestSignatureInformation 提供清單簽名的相關信息。
公共類 ManifestSignatureInformationCollection 表示 ManifestSignatureInformation 對象的只讀集合。 
公共類 MaskGenerationMethod 表示所有掩碼生成器算法均必須從中派生的抽象類。
公共類 MD5 表示 MD5 哈希算法的所有實現均從中繼承的抽象類。
公共類 MD5Cng 提供 MD5(消息摘要 5)128 位哈希算法的 CNG(下一代加密技術)實現。
公共類 MD5CryptoServiceProvider 使用加密服務提供程序 (CSP) 提供的實現,計算輸入數據的 MD5 哈希值。 此類不能被繼承。
公共類 Oid 表示加密對象標識符。 此類不能被繼承。
公共類 OidCollection 表示 Oid 對象的集合。 此類不能被繼承。
公共類 OidEnumerator 提供在 OidCollection 對象中導航的能力。 此類不能被繼承。
公共類 PasswordDeriveBytes 使用 PBKDF1 算法的擴展從密碼派生密鑰。
公共類 PKCS1MaskGenerationMethod 根據 PKCS #1 計算用于密鑰交換算法的掩碼。
公共類 ProtectedData 為加密和解密數據提供方法。 此類不能被繼承。
公共類 ProtectedMemory 提供保護內存和取消內存保護的方法。 此類不能被繼承。
公共類 RandomNumberGenerator 表示加密隨機數生成器的所有實現均從中派生的抽象類。
公共類 RC2 表示 RC2 算法的所有實現都必須從中派生的基類。
公共類 RC2CryptoServiceProvider 定義訪問 RC2 算法的加密服務提供程序 (CSP) 實現的包裝對象。 此類不能被繼承。
公共類 Rfc2898DeriveBytes 通過使用基于 HMACSHA1 的偽隨機數生成器,實現基于密碼的密鑰派生功能 (PBKDF2)。
公共類 Rijndael 表示 Rijndael 對稱加密算法的所有實現必須從其繼承的基類。
公共類 RijndaelManaged 訪問 Rijndael 算法的托管版本。 此類不能被繼承。
公共類 RijndaelManagedTransform 使用 Rijndael 算法執行數據的加密轉換。 此類不能被繼承。
公共類 RIPEMD160 表示 MD160 哈希算法的所有實現均從中繼承的抽象類。
公共類 RIPEMD160Managed 使用托管庫計算輸入數據的 RIPEMD160 哈希值。
公共類 RNGCryptoServiceProvider 使用加密服務提供程序 (CSP) 提供的實現來實現加密隨機數生成器 (RNG)。 此類不能被繼承。
公共類 RSA 表示 RSA 算法的所有實現均從中繼承的基類。
公共類 RSACryptoServiceProvider 使用加密服務提供程序 (CSP) 提供的 RSA 算法的實現執行不對稱加密和解密。 此類不能被繼承。
公共類 RSAOAEPKeyExchangeDeformatter 對最優不對稱加密填充 (OAEP) 密鑰交換數據進行解密。
公共類 RSAOAEPKeyExchangeFormatter 使用 RSA 創建最優不對稱加密填充 (OAEP) 密鑰交換數據。
公共類 RSAPKCS1KeyExchangeDeformatter 解密 PKCS #1 密鑰交換數據。
公共類 RSAPKCS1KeyExchangeFormatter 使用 RSA 創建 PKCS#1 密鑰交換數據。
公共類 RSAPKCS1SignatureDeformatter 驗證 RSA PKCS #1 1.5 版簽名。
公共類 RSAPKCS1SignatureFormatter 創建 RSA PKCS #1 1.5 版簽名。
公共類 SHA1 計算輸入數據的 SHA1 哈希值。
公共類 SHA1Cng 提供安全哈希算法 (SHA) 的下一代加密技術 (CNG) 實現。
公共類 SHA1CryptoServiceProvider 使用加密服務提供程序 (CSP) 提供的實現計算輸入數據的 SHA1 哈希值。 此類不能被繼承。
公共類 SHA1Managed 使用托管庫計算輸入數據的 SHA1 哈希值。
公共類 SHA256 計算輸入數據的 SHA256 哈希值。
公共類 SHA256Cng 為 256 位哈希值提供安全哈希算法 (SHA) 的下一代加密技術 (CNG) 實現。
公共類 SHA256CryptoServiceProvider 定義訪問 SHA256 算法的加密服務提供程序 (CSP) 實現的包裝對象。
公共類 SHA256Managed 使用托管庫計算輸入數據的 SHA256 哈希值。
公共類 SHA384 計算輸入數據的 SHA384 哈希值。
公共類 SHA384Cng 提供具有 384 位哈希值的安全哈希算法 (SHA) 的下一代加密技術 (CNG) 實現。
公共類 SHA384CryptoServiceProvider 定義訪問 SHA384 算法的加密服務提供程序 (CSP) 實現的包裝對象。
公共類 SHA384Managed 使用托管庫計算輸入數據的 SHA384 哈希值。
公共類 SHA512 計算輸入數據的 SHA512 哈希值。
公共類 SHA512Cng 提供使用 512 位哈希值的安全哈希算法 (SHA) 的下一代加密技術 (CNG) 實現。
公共類 SHA512CryptoServiceProvider 定義訪問 SHA512 算法的加密服務提供程序 (CSP) 實現的包裝對象。
公共類 SHA512Managed 使用托管庫計算輸入數據的 SHA512 哈希算法。
公共類 SignatureDescription 包含有關數字簽名的屬性的信息。
公共類 StrongNameSignatureInformation 保存清單的強名稱簽名信息。
公共類 SymmetricAlgorithm 表示所有對稱算法的實現都必須從中繼承的抽象基類。
公共類 ToBase64Transform 將 CryptoStream 轉換為 Base 64。
公共類 TripleDES 表示三重數據加密標準算法的基類,TripleDES 的所有實現都必須從此基類派生。
公共類 TripleDESCryptoServiceProvider 定義訪問 TripleDES 算法的加密服務提供程序 (CSP) 版本的包裝對象。 此類不能被繼承。

以上內容摘自微軟官網

 

下面我來介紹一下最近接觸的幾個加解密算法,包含RSA\AES\DES加解密算法,用到了.NET Framework中提供的RSACryptoServiceProvider類、AesCryptoServiceProvider類、AesManaged類、SHA256Managed類、MD5類、DESCryptoServiceProvider類、SHA1類;

1、RSA

復制代碼
using MY.Cipher.Csv; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; namespace MY.Cipher
{ public class RSACode
    { /// <summary> /// 創建RSA公鑰和私鑰 /// </summary> /// <param name="publicKey"></param> /// <param name="privateKey"></param> /// <returns></returns> public static bool CreateKey(out string publicKey, out string privateKey)
        {
            publicKey = null;
            privateKey = null; try { using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
                { #if RSAXML privateKey = rsa.ToXmlString(true);
                    publicKey = rsa.ToXmlString(false); #else byte[] publicKeyBytes = rsa.ExportCspBlob(false); byte[] privateKeyBytes = rsa.ExportCspBlob(true);
                    publicKey = Convert.ToBase64String(publicKeyBytes);
                    privateKey = Convert.ToBase64String(privateKeyBytes); #endif return true;
                }
            } catch (Exception)
            { return false;
            }
        } /// <summary> /// RSA加密 /// </summary> /// <param name="publickey"></param> /// <param name="content"></param> /// <returns></returns> public static string Encrypt(string publickey, string content)
        { if (string.IsNullOrEmpty(content)) return null; using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            { byte[] cipherbytes; #if RSAXML rsa.FromXmlString(publickey); #else byte[] keyBytes = Convert.FromBase64String(publickey);
                rsa.ImportCspBlob(keyBytes); #endif cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false); return Convert.ToBase64String(cipherbytes);
            }
        } /// <summary> /// RSA加密 /// </summary> /// <param name="publickey"></param> /// <param name="dt"></param> /// <param name="columnIndexs"></param> /// <returns></returns> public static DataTable Encrypt(string publickey, DataTable dt, int[] columnIndexs)
        { if (dt == null) return null;
            DataTable result = dt.Clone(); using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            { #if RSAXML rsa.FromXmlString(publickey); #else byte[] keyBytes = Convert.FromBase64String(publickey);
                rsa.ImportCspBlob(keyBytes); #endif foreach (DataRow dr in dt.Rows)
                { object[] objs = dr.ItemArray; foreach (int index in columnIndexs)
                    { if (objs[index] != null && objs[index] != DBNull.Value)
                        { byte[] bytes = rsa.Encrypt(Encoding.UTF8.GetBytes(objs[index].ToString()), false);
                            objs[index] = Convert.ToBase64String(bytes);
                        }
                    }
                    result.Rows.Add(objs);
                }
            } return result;
        } /// <summary> /// RSA解密 /// </summary> /// <param name="privatekey"></param> /// <param name="content"></param> /// <returns></returns> public static string Decrypt(string privatekey, string content)
        { if (string.IsNullOrEmpty(content)) return null; using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            { byte[] cipherbytes; #if RSAXML rsa.FromXmlString(privatekey); #else byte[] keyBytes = Convert.FromBase64String(privatekey);
                rsa.ImportCspBlob(keyBytes); #endif cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false); return Encoding.UTF8.GetString(cipherbytes);
            }
        } /// <summary> /// RSA解密 /// </summary> /// <param name="privatekey"></param> /// <param name="dt"></param> /// <param name="columnIndexs"></param> /// <returns></returns> public static DataTable Decrypt(string privatekey, DataTable dt, int[] columnIndexs)
        { if (dt == null) return null;
            DataTable result = dt.Clone(); using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            { #if RSAXML rsa.FromXmlString(privatekey); #else byte[] keyBytes = Convert.FromBase64String(privatekey);
                rsa.ImportCspBlob(keyBytes); #endif foreach (DataRow dr in dt.Rows)
                { object[] objs = dr.ItemArray; foreach (int index in columnIndexs)
                    { if (objs[index] != null && objs[index] != DBNull.Value)
                        { byte[] bytes = rsa.Decrypt(Convert.FromBase64String(objs[index].ToString()), false);
                            objs[index] = Encoding.UTF8.GetString(bytes);
                        }
                    }
                    result.Rows.Add(objs);
                }
            } return result;
        } public static int Encrypt(string publickey, string src, string dest, int[] columns, Predicate<string> action)
        { return Encrypt(publickey, src, dest, true, columns, action);
        } public static int Encrypt(string publickey, string src, string dest, bool hasHeaders, int[] columns, Predicate<string> action)
        { using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            { #if RSAXML rsa.FromXmlString(publickey); #else byte[] keyBytes = Convert.FromBase64String(publickey);
                rsa.ImportCspBlob(keyBytes); #endif using (TextReader reader = new StreamReader(src, Encoding.Default))
                { using (TextWriter writer = new StreamWriter(dest, false, Encoding.Default))
                    {
                        CsvReader _reader = new CsvReader(reader, hasHeaders); if (hasHeaders)
                            writer.WriteLine(string.Join(",", _reader.GetFieldHeaders())); int rowIndex = 0; while (_reader.ReadNextRecord())
                        { if (rowIndex > 0 && rowIndex % 100 == 0 && action != null)
                            { if (!action(string.Format("正在處理第{0}行...", rowIndex))) break;
                            } string[] objs = new string[_reader.FieldCount]; for (int index = 0; index < objs.Length; index++)
                            { if (_reader[index] != null && Array.Exists(columns, (column) => { return Convert.ToInt32(column) == index; }))
                                { byte[] bytes = rsa.Encrypt(Encoding.UTF8.GetBytes(_reader[index].ToString()), false);
                                    objs[index] = Convert.ToBase64String(bytes);
                                } else objs[index] = _reader[index];
                            }
                            writer.WriteLine(string.Join(",", objs));
                            rowIndex++;
                        }
                        reader.Close();
                        writer.Close(); return rowIndex;
                    }
                }
            }
        } public static void Encrypt(string publickey, string src, string dest, int[] columns)
        {
            Encrypt(publickey, src, dest, columns, null);
        } public static int Decrypt(string privatekey, string src, string dest, int[] columns, Predicate<string> action)
        { return Decrypt(privatekey, src, dest, true, columns, action);
        } public static int Decrypt(string privatekey, string src, string dest, bool hasHeaders, int[] columns, Predicate<string> action)
        { using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            { #if RSAXML rsa.FromXmlString(privatekey); #else byte[] keyBytes = Convert.FromBase64String(privatekey);
                rsa.ImportCspBlob(keyBytes); #endif using (TextReader reader = new StreamReader(src, Encoding.Default))
                { using (TextWriter writer = new StreamWriter(dest, false, Encoding.Default))
                    {
                        CsvReader _reader = new CsvReader(reader, hasHeaders); if (hasHeaders)
                            writer.WriteLine(string.Join(",", _reader.GetFieldHeaders())); int rowIndex = 0; while (_reader.ReadNextRecord())
                        { if (rowIndex > 0 && rowIndex % 100 == 0 && action != null)
                            { if (!action(string.Format("正在處理第{0}行...", rowIndex))) break;
                            } string[] objs = new string[_reader.FieldCount]; for (int index = 0; index < objs.Length; index++)
                            { if (_reader[index] != null && Array.Exists(columns, (column) => { return Convert.ToInt32(column) == index; }))
                                { byte[] bytes = rsa.Decrypt(Convert.FromBase64String(_reader[index].ToString()), false);
                                    objs[index] = Encoding.UTF8.GetString(bytes);
                                } else objs[index] = _reader[index];
                            }
                            writer.WriteLine(string.Join(",", objs));
                            rowIndex++;
                        }
                        reader.Close();
                        writer.Close(); return rowIndex;
                    }
                }
            }
        } public static void Decrypt(string privatekey, string src, string dest, int[] columns)
        {
            Decrypt(privatekey, src, dest, columns, null);
        }
    }
}
復制代碼
復制代碼
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace MY.Cipher
{ interface ICipher
    { //string Key { get; set; } string Encrypt(string val); string Decrypt(string val);

        DataTable Encrypt(DataTable dt, int[] columnIndexs);

        DataTable Decrypt(DataTable dt, int[] columnIndexs); int Encrypt(string src, string dest, int[] columns, Predicate<string> action); int Decrypt(string src, string dest, int[] columns, Predicate<string> action); int Encrypt(string src, string dest, bool hasHeaders, int[] columns, Predicate<string> action); int Decrypt(string src, string dest, bool hasHeaders, int[] columns, Predicate<string> action); //void GeneralKeyIV(string keyStr, out byte[] key, out byte[] iv);  }
}
復制代碼

 

2、AES

復制代碼
using MY.Cipher.Csv; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; namespace MY.Cipher
{ public class AESCode : ICipher
    { public string Key { get; set; } public string Encrypt(string val)
        { if (string.IsNullOrEmpty(val)) return null; #if CSP using (AesCryptoServiceProvider des = new AesCryptoServiceProvider()) #else using (AesManaged des = new AesManaged()) #endif { byte[] inputByteArray = Encoding.UTF8.GetBytes(val); byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv; using (MemoryStream ms = new MemoryStream())
                { using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(inputByteArray, 0, inputByteArray.Length);
                        cs.FlushFinalBlock(); byte[] bytes = (byte[])ms.ToArray(); return Convert.ToBase64String(bytes);
                    }
                }
            }
        } public string Decrypt(string val)
        { if (string.IsNullOrEmpty(val)) return null; #if CSP using (AesCryptoServiceProvider des = new AesCryptoServiceProvider()) #else using (AesManaged des = new AesManaged()) #endif { byte[] inputByteArray = Convert.FromBase64String(val); byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv; using (MemoryStream ms = new MemoryStream())
                { using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(inputByteArray, 0, inputByteArray.Length);
                        cs.FlushFinalBlock(); return Encoding.UTF8.GetString(ms.ToArray());
                    }
                }
            }
        } public DataTable Encrypt(DataTable dt, int[] columnIndexs)
        { if (dt == null) return null;
            DataTable result = dt.Clone(); #if CSP using (AesCryptoServiceProvider des = new AesCryptoServiceProvider()) #else using (AesManaged des = new AesManaged()) #endif { byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv;
                ICryptoTransform transform = des.CreateEncryptor(); foreach (DataRow dr in dt.Rows)
                { object[] objs = dr.ItemArray; foreach (int index in columnIndexs)
                    { if (objs[index] != null && objs[index] != DBNull.Value)
                        { using (MemoryStream ms = new MemoryStream())
                            { using (CryptoStream cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
                                { byte[] src = Encoding.UTF8.GetBytes(objs[index].ToString()); if (src.Length == 0) continue;
                                    cs.Write(src, 0, src.Length);
                                    cs.FlushFinalBlock(); byte[] bytes = (byte[])ms.ToArray();
                                    objs[index] = Convert.ToBase64String(bytes);
                                }
                            }
                        }
                    }
                    result.Rows.Add(objs);
                }
            } return result;
        } public DataTable Decrypt(DataTable dt, int[] columnIndexs)
        { if (dt == null) return null;
            DataTable result = dt.Clone(); #if CSP using (AesCryptoServiceProvider des = new AesCryptoServiceProvider()) #else using (AesManaged des = new AesManaged()) #endif { byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv;
                ICryptoTransform transform = des.CreateDecryptor(); foreach (DataRow dr in dt.Rows)
                { object[] objs = dr.ItemArray; foreach (int index in columnIndexs)
                    { if (objs[index] != null && objs[index] != DBNull.Value)
                        { using (MemoryStream ms = new MemoryStream())
                            { using (CryptoStream cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
                                { byte[] src = Convert.FromBase64String(objs[index].ToString()); if (src.Length == 0) continue;
                                    cs.Write(src, 0, src.Length);
                                    cs.FlushFinalBlock();
                                    objs[index] = Encoding.UTF8.GetString(ms.ToArray());
                                }
                            }
                        }
                    }
                    result.Rows.Add(objs);
                }
            } return result;
        } public int Encrypt(string src, string dest, int[] columns, Predicate<string> action)
        { return Encrypt(src, dest, true, columns, action);
        } public int Decrypt(string src, string dest, int[] columns, Predicate<string> action)
        { return Decrypt(src, dest, true, columns, action);
        } public int Encrypt(string src, string dest, bool hasHeaders, int[] columns, Predicate<string> action)
        { #if CSP using (AesCryptoServiceProvider des = new AesCryptoServiceProvider()) #else using (AesManaged des = new AesManaged()) #endif { byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv;
                ICryptoTransform transform = des.CreateEncryptor(); using (TextReader reader = new StreamReader(src, Encoding.Default))
                { using (TextWriter writer = new StreamWriter(dest, false, Encoding.Default))
                    {
                        CsvReader _reader = new CsvReader(reader, hasHeaders); if (hasHeaders)
                            writer.WriteLine(string.Join(",", _reader.GetFieldHeaders())); int rowIndex = 0; while (_reader.ReadNextRecord())
                        { if (rowIndex > 0 && rowIndex % 100 == 0 && action != null)
                            { if (!action(string.Format("正在處理第{0}行...", rowIndex))) break;
                            } string[] objs = new string[_reader.FieldCount]; for (int index = 0; index < objs.Length; index++)
                            { if (_reader[index] != null && Array.Exists(columns, (column) => { return Convert.ToInt32(column) == index; }))
                                { using (MemoryStream ms = new MemoryStream())
                                    { using (CryptoStream cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
                                        { byte[] _bytes = Encoding.UTF8.GetBytes(_reader[index].ToString()); if (_bytes.Length == 0) continue;
                                            cs.Write(_bytes, 0, _bytes.Length);
                                            cs.FlushFinalBlock(); byte[] bytes = (byte[])ms.ToArray();
                                            objs[index] = Convert.ToBase64String(bytes);
                                        }
                                    }
                                } else objs[index] = _reader[index];
                            }
                            writer.WriteLine(string.Join(",", objs));
                            rowIndex++;
                        }
                        reader.Close();
                        writer.Close(); return rowIndex;
                    }
                }
            }
        } public int Decrypt(string src, string dest, bool hasHeaders, int[] columns, Predicate<string> action)
        { #if CSP using (AesCryptoServiceProvider des = new AesCryptoServiceProvider()) #else using (AesManaged des = new AesManaged()) #endif { byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv;
                ICryptoTransform transform = des.CreateDecryptor(); using (TextReader reader = new StreamReader(src, Encoding.Default))
                { using (TextWriter writer = new StreamWriter(dest, false, Encoding.Default))
                    {
                        CsvReader _reader = new CsvReader(reader, hasHeaders); if (hasHeaders)
                            writer.WriteLine(string.Join(",", _reader.GetFieldHeaders())); int rowIndex = 0; while (_reader.ReadNextRecord())
                        { if (rowIndex > 0 && rowIndex % 100 == 0 && action != null)
                            { if (!action(string.Format("正在處理第{0}行...", rowIndex))) break;
                            } string[] objs = new string[_reader.FieldCount]; for (int index = 0; index < objs.Length; index++)
                            { if (_reader[index] != null && Array.Exists(columns, (column) => { return Convert.ToInt32(column) == index; }))
                                { using (MemoryStream ms = new MemoryStream())
                                    { using (CryptoStream cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
                                        { byte[] _bytes = Convert.FromBase64String(_reader[index].ToString()); if (_bytes.Length == 0) continue;
                                            cs.Write(_bytes, 0, _bytes.Length);
                                            cs.FlushFinalBlock();
                                            objs[index] = Encoding.UTF8.GetString(ms.ToArray());
                                        }
                                    }
                                } else objs[index] = _reader[index];
                            }
                            writer.WriteLine(string.Join(",", objs));
                            rowIndex++;
                        }
                        reader.Close();
                        writer.Close(); return rowIndex;
                    }
                }
            }
        } public void GeneralKeyIV(string keyStr, out byte[] key, out byte[] iv)
        { byte[] bytes = Encoding.UTF8.GetBytes(keyStr);
            key = SHA256Managed.Create().ComputeHash(bytes);
            iv = MD5.Create().ComputeHash(bytes);
        }
    }
}
復制代碼

3、DES

復制代碼
using MY.Cipher.Csv; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; namespace MY.Cipher
{ public class DESCode : ICipher
    { public string Key { get; set; } public string Encrypt(string val)
        { if (string.IsNullOrEmpty(val)) return null; using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            { byte[] inputByteArray = Encoding.UTF8.GetBytes(val); byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv; using (MemoryStream ms = new MemoryStream())
                { using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(inputByteArray, 0, inputByteArray.Length);
                        cs.FlushFinalBlock(); byte[] bytes = (byte[])ms.ToArray(); return Convert.ToBase64String(bytes);
                    }
                }
            }
        } public string Decrypt(string val)
        { if (string.IsNullOrEmpty(val)) return null; using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            { byte[] inputByteArray = Convert.FromBase64String(val); byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv; using (MemoryStream ms = new MemoryStream())
                { using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(inputByteArray, 0, inputByteArray.Length);
                        cs.FlushFinalBlock(); return Encoding.UTF8.GetString(ms.ToArray());
                    }
                }
            }
        } public DataTable Encrypt(DataTable dt, int[] columnIndexs)
        { if (dt == null) return null;
            DataTable result = dt.Clone(); using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            { byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv;
                ICryptoTransform transform = des.CreateEncryptor(); foreach (DataRow dr in dt.Rows)
                { object[] objs = dr.ItemArray; foreach (int index in columnIndexs)
                    { if (objs[index] != null && objs[index] != DBNull.Value)
                        { using (MemoryStream ms = new MemoryStream())
                            { using (CryptoStream cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
                                { byte[] src = Encoding.UTF8.GetBytes(objs[index].ToString()); if (src.Length == 0) continue;
                                    cs.Write(src, 0, src.Length);
                                    cs.FlushFinalBlock(); byte[] bytes = (byte[])ms.ToArray();
                                    objs[index] = Convert.ToBase64String(bytes);
                                }
                            }
                        }
                    }
                    result.Rows.Add(objs);
                }
            } return result;
        } public DataTable Decrypt(DataTable dt, int[] columnIndexs)
        { if (dt == null) return null;
            DataTable result = dt.Clone(); using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            { byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv;
                ICryptoTransform transform = des.CreateDecryptor(); foreach (DataRow dr in dt.Rows)
                { object[] objs = dr.ItemArray; foreach (int index in columnIndexs)
                    { if (objs[index] != null && objs[index] != DBNull.Value)
                        { using (MemoryStream ms = new MemoryStream())
                            { using (CryptoStream cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
                                { byte[] src = Convert.FromBase64String(objs[index].ToString()); if (src.Length == 0) continue;
                                    cs.Write(src, 0, src.Length);
                                    cs.FlushFinalBlock();
                                    objs[index] = Encoding.UTF8.GetString(ms.ToArray());
                                }
                            }
                        }
                    }
                    result.Rows.Add(objs);
                }
            } return result;
        } public int Encrypt(string src, string dest, int[] columns, Predicate<string> action)
        { return Encrypt(src, dest, true, columns, action);
        } public int Decrypt(string src, string dest, int[] columns, Predicate<string> action)
        { return Decrypt(src, dest, true, columns, action);
        } public int Encrypt(string src, string dest, bool hasHeaders, int[] columns, Predicate<string> action)
        { using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            { byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv;
                ICryptoTransform transform = des.CreateEncryptor(); using (TextReader reader = new StreamReader(src, Encoding.Default))
                { using (TextWriter writer = new StreamWriter(dest, false, Encoding.Default))
                    {
                        CsvReader _reader = new CsvReader(reader, hasHeaders); if (hasHeaders)
                            writer.WriteLine(string.Join(",", _reader.GetFieldHeaders())); int rowIndex = 0; while (_reader.ReadNextRecord())
                        { if (rowIndex > 0 && rowIndex % 100 == 0 && action != null)
                            { if (!action(string.Format("正在處理第{0}行...", rowIndex))) break;
                            } string[] objs = new string[_reader.FieldCount]; for (int index = 0; index < objs.Length; index++)
                            { if (_reader[index] != null && Array.Exists(columns, (column) => { return Convert.ToInt32(column) == index; }))
                                { using (MemoryStream ms = new MemoryStream())
                                    { using (CryptoStream cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
                                        { byte[] _bytes = Encoding.UTF8.GetBytes(_reader[index].ToString()); if (_bytes.Length == 0) continue;
                                            cs.Write(_bytes, 0, _bytes.Length);
                                            cs.FlushFinalBlock(); byte[] bytes = (byte[])ms.ToArray();
                                            objs[index] = Convert.ToBase64String(bytes);
                                        }
                                    }
                                } else objs[index] = _reader[index];
                            }
                            writer.WriteLine(string.Join(",", objs));
                            rowIndex++;
                        }
                        reader.Close();
                        writer.Close(); return rowIndex;
                    }
                }
            }
        } public int Decrypt(string src, string dest, bool hasHeaders, int[] columns, Predicate<string> action)
        { using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            { byte[] _key; byte[] _iv;
                GeneralKeyIV(this.Key, out _key, out _iv);
                des.Key = _key;
                des.IV = _iv;
                ICryptoTransform transform = des.CreateDecryptor(); using (TextReader reader = new StreamReader(src, Encoding.Default))
                { using (TextWriter writer = new StreamWriter(dest, false, Encoding.Default))
                    {
                        CsvReader _reader = new CsvReader(reader, hasHeaders); if (hasHeaders)
                            writer.WriteLine(string.Join(",", _reader.GetFieldHeaders())); int rowIndex = 0; while (_reader.ReadNextRecord())
                        { if (rowIndex > 0 && rowIndex % 100 == 0 && action != null)
                            { if (!action(string.Format("正在處理第{0}行...", rowIndex))) break;
                            } string[] objs = new string[_reader.FieldCount]; for (int index = 0; index < objs.Length; index++)
                            { if (_reader[index] != null && Array.Exists(columns, (column) => { return Convert.ToInt32(column) == index; }))
                                { using (MemoryStream ms = new MemoryStream())
                                    { using (CryptoStream cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
                                        { byte[] _bytes = Convert.FromBase64String(_reader[index].ToString()); if (_bytes.Length == 0) continue;
                                            cs.Write(_bytes, 0, _bytes.Length);
                                            cs.FlushFinalBlock();
                                            objs[index] = Encoding.UTF8.GetString(ms.ToArray());
                                        }
                                    }
                                } else objs[index] = _reader[index];
                            }
                            writer.WriteLine(string.Join(",", objs));
                            rowIndex++;
                        }
                        reader.Close();
                        writer.Close(); return rowIndex;
                    }
                }
            }
        } public void GeneralKeyIV(string keyStr, out byte[] key, out byte[] iv)
        { byte[] bytes = Encoding.UTF8.GetBytes(keyStr); byte[] _key = SHA1.Create().ComputeHash(bytes);
            key = new byte[8];
            iv = new byte[8]; for (int i = 0; i < 8; i++)
            {
                iv[i] = _key[i];
                key[i] = _key[i];
            }
        }
    }
}
復制代碼

 

主站蜘蛛池模板: 一区二区久久精品66国产精品 | 日韩免费黄色 | 一区二区免费网站 | 久久国产精品成人免费网站 | 国产1区2区3区中文字幕 | 久久久久久久久日本理论电影 | 国产精品久久久久久久久粉嫩 | 欧美 videos粗暴| 精品一区在线视频 | 精品成人在线观看 | 国产精品www | 午夜精品成人一区二区 | 久久久久久中文字幕 | 日本黄色大片免费 | 日韩黄色免费电影 | 一区二区久久久久草草 | 久精品久久 | 欧美性生活久久 | 日本高清一级片 | 欧美国产精品一区二区 | 国产精品一区99 | 一级毛片在线免费播放 | 久久精品re | 在线免费观看欧美 | asian gaysex| 羞羞羞羞视频 | 午夜精品久久久久久久96蜜桃 | 日本中文字幕网址 | 一级在线免费观看视频 | 国产自在自线午夜精品视频在 | 在线观看麻豆 | 九九精品在线观看视频 | 欧美日韩国产综合网 | www.54271.com| 99精品国产视频 | 91精品国产乱码久久久久久久久 | 国产亚洲精品美女久久久 | 国产精品中文在线 | 欧美成人精品一级 | 在线播放中文 | 在线观看国产 |