zoukankan      html  css  js  c++  java
  • C# 3Des两种加密方式 (对应java中的desede/CBC/PKCS5Padding加密)

    1、3Des两种加密方式

        //3DES的cbc加密[24位密钥对应192位加密]
            public static string TripleDesEncryptorCBC(string text, string key, string iv)
            {
                var tripleDESCipher = new TripleDESCryptoServiceProvider();
                tripleDESCipher.Mode = CipherMode.CBC;
                tripleDESCipher.Padding = PaddingMode.PKCS7;
                byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(key);
                byte[] keyBytes = new byte[24];
                int len = pwdBytes.Length;
                if (len > keyBytes.Length)
                    len = keyBytes.Length;
                System.Array.Copy(pwdBytes, keyBytes, len);
                tripleDESCipher.Key = keyBytes;
                tripleDESCipher.IV = Encoding.ASCII.GetBytes(iv);
     
                ICryptoTransform transform = tripleDESCipher.CreateEncryptor();
                byte[] plainText = Encoding.UTF8.GetBytes(text);
                byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length);
                return Convert.ToBase64String(cipherBytes);
            }
     
            //3DES的cbc解密
            public static string TripleDesDecryptorCBC(string text, string key, string iv)
            {
                var tripleDESCipher = new TripleDESCryptoServiceProvider();
                tripleDESCipher.Mode = CipherMode.CBC;
                tripleDESCipher.Padding = PaddingMode.PKCS7;
     
                byte[] encryptedData = Convert.FromBase64String(text);
                byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(key);
                byte[] keyBytes = new byte[24];
                byte[] ivBytes = Encoding.ASCII.GetBytes(iv);
                int len = pwdBytes.Length;
                if (len > keyBytes.Length)
                    len = keyBytes.Length;
                System.Array.Copy(pwdBytes, keyBytes, len);
                tripleDESCipher.Key = keyBytes;
                tripleDESCipher.IV = ivBytes;
                ICryptoTransform transform = tripleDESCipher.CreateDecryptor();
                byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
                return Encoding.UTF8.GetString(plainText);
            }
     
     
            //加密
            public string DESEncrypt(string paymentCode, string key, string iv)
            {
                SymmetricAlgorithm symmetric;
                ICryptoTransform iCrypto;
                MemoryStream memory;
                CryptoStream crypto;
                byte[] byt;
                symmetric = new TripleDESCryptoServiceProvider();
                symmetric.Key = Encoding.UTF8.GetBytes(key);
                symmetric.IV = Encoding.UTF8.GetBytes(iv);
                iCrypto = symmetric.CreateEncryptor();
                byt = Encoding.UTF8.GetBytes(paymentCode);
                memory = new MemoryStream();
                crypto = new CryptoStream(memory, iCrypto, CryptoStreamMode.Write);
                crypto.Write(byt, 0, byt.Length);
                crypto.FlushFinalBlock();
                crypto.Close();
                return Convert.ToBase64String(memory.ToArray());
            }
     
            //解密
            public static string DESDecrypst(string data, string key, string iv)
            {
                SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
     
                mCSP.Key = Encoding.UTF8.GetBytes(key);
                mCSP.IV = Encoding.UTF8.GetBytes(iv);
                ICryptoTransform iCrypto;
                MemoryStream memory;
                CryptoStream crypto;
                byte[] byt;
                iCrypto = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
     
                byt = Convert.FromBase64String(data);
                memory = new MemoryStream();
                crypto = new CryptoStream(memory, iCrypto, CryptoStreamMode.Write);
                crypto.Write(byt, 0, byt.Length);
                crypto.FlushFinalBlock();
                crypto.Close();
                return Encoding.UTF8.GetString(memory.ToArray());
            }
  • 相关阅读:
    积水路面Wet Road Materials 2.3
    门控时钟问题
    饮料机问题
    Codeforces Round #340 (Div. 2) E. XOR and Favorite Number (莫队)
    Educational Codeforces Round 82 (Rated for Div. 2)部分题解
    Educational Codeforces Round 86 (Rated for Div. 2)部分题解
    Grakn Forces 2020部分题解
    2020 年百度之星·程序设计大赛
    POJ Nearest Common Ancestors (RMQ+树上dfs序求LCA)
    算法竞赛进阶指南 聚会 (LCA)
  • 原文地址:https://www.cnblogs.com/kevin860/p/12632405.html
Copyright © 2011-2022 走看看