亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#加密解密類實例程序

2020-01-24 03:02:33
字體:
來源:轉載
供稿:網友

前兩年寫的東西,現在整理一下發出來!以前公司需要做WebService,并且對WebService的SoapHeader進行加密,所以就寫了這么個東東!使用這個類,需要密鑰管理!為了保證數據的安全性往往要對數據進行加密,但是加密的缺點之一,就是影響程序的運行效率,所以,當時我的思路是只對用戶的登錄信息(用戶名,密碼)進行加密!數據用明文傳輸,用戶信息驗證沒有通過的情況下, 不進行數據傳輸。
實際在網絡通訊中,使用密鑰匙的方式并非無懈可擊,如果黑客可以捕捉到用密鑰加密的,用戶驗證信息,然后,做個模擬請求,向提供WebService的服務器發請求,還是可以獲得請求數據!所以,我又使用了IP或者域名綁定的方式!畢竟,WebService不是直接對最終用戶提供的!所以,加上以上這些手段后,就算有不良企圖者想通過非法方式獲得WebService提供的服務,就再費點勁吧!
還有一點安全建議,就是定期的更換密鑰,在這個例子中,我用的是對稱加密,加密方和解密方的密鑰一致!定期的更換密鑰可以讓安全性提高一大截!

大家要有更好的方法,或者建議,可以留言討論一下!共同提高!

代碼如下:

復制代碼 代碼如下:

using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;

namespace SEDO
{
    /// <summary>
    /// SEDO 的摘要說明。
    /// SEDO 實現的是用一個封裝了4種對稱加密方法(Des,Rc2,Rijndael,TripleDes)的組件
    ///
    /// 注意事項:
    /// 1:TripleDes和Rijndael加密/解密對象使用16或者24位byte的Key
    /// 2:Rijndael只能使用16位的初始化向量IV
    /// 3:Des和Rc2均使用8位Byte的Key和IV
    /// 4:對需要加密/解密的數據流采用何種方法進行編碼/解碼,由調用組件的用戶自己決定
    /// 5:密鑰和初始化向量IV由使用者自己定義
    /// 程序員: 羅旭成2010-10-30 lxc880615@163.com
    /// </summary>

    //定義加密類型的枚舉
    public enum EncryptionAlgorithm { Des = 1, Rc2, Rijndael, TripleDes };

    //定義加密類
    internal class EncryptTransformer
    {
        private EncryptionAlgorithm algorithmID;
        private byte[] initVec;
        private byte[] encKey;

        internal EncryptTransformer(EncryptionAlgorithm algId)
        {
            //Save the algorithm being used.
            algorithmID = algId;
        }

        internal ICryptoTransform GetCryptoServiceProvider(byte[] bytesKey)
        {
            //當數據密鑰Key或者初始化向量IV為空的時候,
            //將使用加密對象自動產生的密鑰Key或者初始化向量IV
            switch (algorithmID)
            {
                case EncryptionAlgorithm.Des:
                    {
                        DES des = new DESCryptoServiceProvider();
                        des.Mode = CipherMode.CBC;

                        // See if a key was provided
                        if (null == bytesKey)
                        {
                            encKey = des.Key;
                        }
                        else
                        {
                            des.Key = bytesKey;
                            encKey = des.Key;
                        }
                        // See if the client provided an initialization vector
                        if (null == initVec)
                        { // Have the algorithm create one
                            initVec = des.IV;
                        }
                        else
                        { //No, give it to the algorithm
                            des.IV = initVec;
                        }
                        return des.CreateEncryptor();
                    }
                case EncryptionAlgorithm.TripleDes:
                    {
                        TripleDES des3 = new TripleDESCryptoServiceProvider();
                        des3.Mode = CipherMode.CBC;
                        // See if a key was provided
                        if (null == bytesKey)
                        {
                            encKey = des3.Key;
                        }
                        else
                        {
                            des3.Key = bytesKey;
                            encKey = des3.Key;
                        }
                        // See if the client provided an IV
                        if (null == initVec)
                        { //Yes, have the alg create one
                            initVec = des3.IV;
                        }
                        else
                        { //No, give it to the alg.
                            des3.IV = initVec;
                        }
                        return des3.CreateEncryptor();
                    }
                case EncryptionAlgorithm.Rc2:
                    {
                        RC2 rc2 = new RC2CryptoServiceProvider();
                        rc2.Mode = CipherMode.CBC;
                        // Test to see if a key was provided
                        if (null == bytesKey)
                        {
                            encKey = rc2.Key;
                        }
                        else
                        {
                            rc2.Key = bytesKey;
                            encKey = rc2.Key;
                        }
                        // See if the client provided an IV
                        if (null == initVec)
                        { //Yes, have the alg create one
                            initVec = rc2.IV;
                        }
                        else
                        { //No, give it to the alg.
                            rc2.IV = initVec;
                        }
                        return rc2.CreateEncryptor();
                    }
                case EncryptionAlgorithm.Rijndael:
                    {
                        Rijndael rijndael = new RijndaelManaged();
                        rijndael.Mode = CipherMode.CBC;
                        // Test to see if a key was provided
                        if (null == bytesKey)
                        {
                            encKey = rijndael.Key;
                        }
                        else
                        {
                            rijndael.Key = bytesKey;
                            encKey = rijndael.Key;
                        }
                        // See if the client provided an IV
                        if (null == initVec)
                        { //Yes, have the alg create one
                            initVec = rijndael.IV;
                        }
                        else
                        { //No, give it to the alg.
                            rijndael.IV = initVec;
                        }
                        return rijndael.CreateEncryptor();
                    }
                default:
                    {
                        throw new CryptographicException("Algorithm ID '" +
                        algorithmID +
                        "' not supported.");
                    }
            }
        }

        //加密的偏移向量
        internal byte[] IV
        {
            get { return initVec; }
            set { initVec = value; }
        }
        //加密的密鑰
        internal byte[] Key
        {
            get { return encKey; }
            set { encKey = value; }
        }

    }

    //定義解密類
    internal class DecryptTransformer
    {
        private EncryptionAlgorithm algorithmID;
        private byte[] initVec;
        private byte[] encKey;

        internal DecryptTransformer(EncryptionAlgorithm deCryptId)
        {
            algorithmID = deCryptId;
        }

        //加密的偏移向量
        internal byte[] IV
        {
            get { return initVec; }
            set { initVec = value; }
        }

        //加密的密鑰
        internal byte[] Key
        {
            get { return encKey; }
            set { encKey = value; }
        }

        internal ICryptoTransform GetCryptoServiceProvider(byte[] bytesKey)
        {
            //當數據密鑰Key或者初始化向量IV為空的時候,
            //將使用加密對象自動產生的密鑰Key或者初始化向量IV
            switch (algorithmID)
            {
                case EncryptionAlgorithm.Des:
                    {
                        DES des = new DESCryptoServiceProvider();
                        des.Mode = CipherMode.CBC;
                        des.Key = bytesKey;
                        des.IV = initVec;
                        return des.CreateDecryptor();
                    }
                case EncryptionAlgorithm.TripleDes:
                    {
                        TripleDES des3 = new TripleDESCryptoServiceProvider();
                        des3.Mode = CipherMode.CBC;
                        return des3.CreateDecryptor(bytesKey, initVec);
                    }
                case EncryptionAlgorithm.Rc2:
                    {
                        RC2 rc2 = new RC2CryptoServiceProvider();
                        rc2.Mode = CipherMode.CBC;
                        return rc2.CreateDecryptor(bytesKey, initVec);
                    }
                case EncryptionAlgorithm.Rijndael:
                    {
                        Rijndael rijndael = new RijndaelManaged();
                        rijndael.Mode = CipherMode.CBC;
                        return rijndael.CreateDecryptor(bytesKey, initVec);
                    }
                default:
                    {
                        throw new CryptographicException("Algorithm ID '" +
                        algorithmID +
                        "' not supported.");
                    }
            }
        } //end GetCryptoServiceProvider

    }

    //定義加密者類
    public class Encryptor
    {
        private EncryptTransformer transformer;
        private byte[] initVec;
        private byte[] encKey;

        public Encryptor(EncryptionAlgorithm algId)
        {
            transformer = new EncryptTransformer(algId);
        }

        public byte[] Encrypt(byte[] bytesData, byte[] bytesKey, byte[] bytesIV)
        {
            //設置流對象用來保存加密數據字節流.
            MemoryStream memStreamEncryptedData = new MemoryStream();

            transformer.IV = bytesIV;
            transformer.Key = bytesKey;

            ICryptoTransform transform =
                transformer.GetCryptoServiceProvider(bytesKey);
            CryptoStream encStream =
                new CryptoStream(memStreamEncryptedData,
                    transform, CryptoStreamMode.Write);

            try
            {
                //將加密數據寫進流對象
                encStream.Write(bytesData, 0, bytesData.Length);
            }
            catch (Exception ex)
            {
                throw new Exception("在數據加密的時候出現錯誤!"+
                    "錯誤提示: /n" + ex.Message);
            }

            //設置加密的Key和初始向量IV屬性
            encKey = transformer.Key;
            initVec = transformer.IV;

            encStream.FlushFinalBlock();
            encStream.Close();

            //Send the data back.
            return memStreamEncryptedData.ToArray();
        }

        public byte[] IV
        {
            get { return initVec; }
            set { initVec = value; }
        }

        public byte[] Key
        {
            get { return encKey; }
            set { encKey = value; }
        }

    }

 
    //定義解密者類
    public class Decryptor
    {
        private DecryptTransformer transformer;
        private byte[] initVec;
        private byte[] encKey;

        public Decryptor(EncryptionAlgorithm algId)
        {
            transformer = new DecryptTransformer(algId);
        }

        public byte[] Decrypt(byte[] bytesData,
            byte[] bytesKey, byte[] bytesIV)
        {
            //設置流對象用來保存解密數據字節流.
            MemoryStream memStreamDecryptedData =
                new MemoryStream();

            //Pass in the initialization vector.
            transformer.IV = bytesIV;
            transformer.Key = bytesKey;

            ICryptoTransform transform =
                transformer.GetCryptoServiceProvider(bytesKey);
            CryptoStream decStream =
                new CryptoStream(memStreamDecryptedData,
                    transform, CryptoStreamMode.Write);

            try
            {
                decStream.Write(bytesData, 0, bytesData.Length);
            }
            catch (Exception ex)
            {
                throw new Exception("在數據解密的時候出現錯誤!"+
                    "錯誤提示: /n" + ex.Message);
            }
            decStream.FlushFinalBlock();
            decStream.Close();
            // 返回解密數據.
            return memStreamDecryptedData.ToArray();
        }

        public byte[] IV
        {
            get { return initVec; }
            set { initVec = value; }
        }

        public byte[] Key
        {
            get { return encKey; }
            set { encKey = value; }
        }

    }

    //類描述:文件加密/解密類
    public class SecurityFile
    {
        private DecryptTransformer Dec_Transformer; //解密轉換器
        private EncryptTransformer Enc_Transformer; //加密轉換器
        private byte[] initVec;
        private byte[] encKey;

        public SecurityFile(EncryptionAlgorithm algId)
        {
            Dec_Transformer = new DecryptTransformer(algId);
            Enc_Transformer = new EncryptTransformer(algId);
        }

        //加密的偏移向量
        internal byte[] IV
        {
            get { return initVec; }
            set { initVec = value; }
        }
        //加密的密鑰
        internal byte[] Key
        {
            get { return encKey; }
            set { encKey = value; }
        }

        //功能描述:加密文件
        public void EncryptFile(string inFileName,
            string outFileName, byte[] bytesKey, byte[] bytesIV)
        {
            try
            {
                FileStream fin =
                    new FileStream(inFileName, FileMode.Open,
                        FileAccess.Read);
                FileStream fout = new FileStream(outFileName,
                    FileMode.OpenOrCreate, FileAccess.Write);
                fout.SetLength(0);

                //Create variables to help with read and write.
                //This is intermediate storage for the encryption.
                byte[] bin = new byte[100];
                //This is the total number of bytes written.
                long rdlen = 0;
                //This is the total length of the input file.
                long totlen = fin.Length;
                //This is the number of bytes to be written at a time.
                int len;

                Enc_Transformer.IV = bytesIV;
                Enc_Transformer.Key = bytesKey;

                ICryptoTransform transform =
                    Enc_Transformer.GetCryptoServiceProvider(bytesKey);
                CryptoStream encStream =
                    new CryptoStream(fout, transform, CryptoStreamMode.Write);

                //Read from the input file, then encrypt and write to the output file.
                while (rdlen < totlen)
                {
                    len = fin.Read(bin, 0, 100);
                    encStream.Write(bin, 0, len);
                    rdlen = rdlen + len;
                }

                encStream.Close();
                fout.Close();
                fin.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("在文件加密的時候出現錯誤!"+
                    "錯誤提示: /n" + ex.Message);
            }
        }

        //功能描述:解密文件
        public void DecryptFile(string inFileName,
            string outFileName, byte[] bytesKey, byte[] bytesIV)
        {
            try
            {
                FileStream fin =
                    new FileStream(inFileName, FileMode.Open,
                        FileAccess.Read);
                FileStream fout =
                    new FileStream(outFileName,
                        FileMode.OpenOrCreate, FileAccess.Write);
                fout.SetLength(0);

                //Create variables to help with read and write.
                //This is intermediate storage for the encryption.
                byte[] bin = new byte[100];
                //This is the total number of bytes written.
                long rdlen = 0;
                //This is the total length of the input file.
                long totlen = fin.Length;
                //This is the number of bytes to be written at a time.
                int len;

                Dec_Transformer.IV = bytesIV;
                Dec_Transformer.Key = bytesKey;

                ICryptoTransform transform =
                    Dec_Transformer.GetCryptoServiceProvider(bytesKey);
                CryptoStream encStream =
                    new CryptoStream(fout, transform, CryptoStreamMode.Write);

                //Read from the input file, then encrypt and
                //write to the output file.
                while (rdlen < totlen)
                {
                    len = fin.Read(bin, 0, 100);
                    encStream.Write(bin, 0, len);
                    rdlen = rdlen + len;
                }
                encStream.Close();
                fout.Close();
                fin.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("在文件加密的時候出現"+
                    "錯誤!錯誤提示: /n" + ex.Message);
            }
        }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品久久久久久久免费观看| 国内精品久久久久久久久| 久久91精品国产91久久久| 欧美性猛交xxxx乱大交蜜桃| 亚洲一二在线观看| 久久亚洲精品成人| 国产极品精品在线观看| 欧美乱大交xxxxx| 日韩欧美在线中文字幕| 上原亚衣av一区二区三区| 久久这里只有精品99| 91精品国产色综合久久不卡98口| 国产精品96久久久久久| 国产综合色香蕉精品| 97视频在线观看视频免费视频| 久久精品人人做人人爽| 亚洲最大福利视频网站| 国产欧美韩国高清| 91人人爽人人爽人人精88v| 国产97色在线|日韩| 欧美日韩国产一区在线| 亚洲丁香婷深爱综合| 亚洲国产免费av| 成人福利在线视频| 久久视频在线播放| 美女久久久久久久| 精品久久在线播放| 欧美日韩在线视频首页| 国产精品91在线观看| 亚洲激情在线观看视频免费| 欧美日韩福利视频| 91麻豆国产语对白在线观看| 亚洲男人天堂视频| 国产69精品久久久久99| 亚洲第一天堂av| 日韩av在线播放资源| 欧美在线中文字幕| 欧美日韩福利在线观看| 日韩黄色在线免费观看| 欧美黄色性视频| 岛国av一区二区在线在线观看| 日韩亚洲精品电影| 亚洲欧美精品一区二区| 日韩中文在线中文网三级| 这里只有精品在线观看| 亚洲精品自拍偷拍| 国产成人a亚洲精品| 黑人狂躁日本妞一区二区三区| 欧美大片欧美激情性色a∨久久| 日韩亚洲成人av在线| 国产亚洲精品美女久久久久| 精品久久久久久久中文字幕| 精品综合久久久久久97| 国产女人精品视频| 亚洲自拍高清视频网站| 国产乱人伦真实精品视频| 亚洲性xxxx| 久久国产加勒比精品无码| 亚洲午夜av电影| 欧美一级淫片丝袜脚交| 亚洲欧洲国产一区| 久久精品国产一区| 色婷婷亚洲mv天堂mv在影片| 成人精品一区二区三区电影免费| 亚洲精品一区二三区不卡| 国产精品爱久久久久久久| 欧美理论片在线观看| 岛国av一区二区三区| 精品国产乱码久久久久久天美| 国产丝袜一区视频在线观看| 日韩精品黄色网| 亚洲精品有码在线| 国产va免费精品高清在线| 亚洲精品小视频在线观看| 9.1国产丝袜在线观看| 日日狠狠久久偷偷四色综合免费| 在线观看精品自拍私拍| 日韩欧美精品免费在线| 成人有码在线播放| 欧美日韩一区二区在线播放| 免费91麻豆精品国产自产在线观看| 久久6免费高清热精品| 亚洲自拍偷拍网址| 欧美激情欧美激情在线五月| 国产成人激情小视频| 国产在线a不卡| 国产主播在线一区| 亚洲情综合五月天| 国产精品自拍小视频| 亚洲精品97久久| 欧美一区视频在线| 亚洲国产精品专区久久| 亲爱的老师9免费观看全集电视剧| 91免费版网站入口| 久久精品99国产精品酒店日本| 中文字幕久久精品| 中文字幕精品影院| 91天堂在线视频| 欧美成人午夜影院| 国产精品综合不卡av| 亚洲国产精品国自产拍av秋霞| 国产成人精品综合| 最近2019年手机中文字幕| 国产成人jvid在线播放| 亚洲天堂男人的天堂| 欧美高清视频免费观看| 欧美日韩爱爱视频| 久久这里只有精品99| 91国内精品久久| 国产精品成人av性教育| 亚洲成年网站在线观看| 中文字幕亚洲欧美在线| 九九热精品视频| 精品亚洲一区二区三区在线播放| 日韩精品中文字幕视频在线| 免费不卡在线观看av| 国产精品福利在线| 久久久精品免费| 欧美黄色片视频| 国内精品久久影院| 人妖精品videosex性欧美| 欧美香蕉大胸在线视频观看| 成人精品在线观看| 国产综合在线视频| 91沈先生在线观看| 欧美黑人狂野猛交老妇| 51ⅴ精品国产91久久久久久| 国产精品igao视频| 亚洲人精选亚洲人成在线| 丁香五六月婷婷久久激情| 久久久爽爽爽美女图片| 亚洲在线第一页| 中文字幕日韩欧美精品在线观看| 国产欧美最新羞羞视频在线观看| 久久视频在线视频| 欧美视频专区一二在线观看| 精品丝袜一区二区三区| 亚洲第一福利在线观看| 91久久久久久国产精品| 欧美在线视频免费观看| 久久久亚洲福利精品午夜| 日韩在线观看精品| 日韩黄在线观看| 成人综合国产精品| 国产精品视频男人的天堂| 尤物九九久久国产精品的分类| 在线亚洲午夜片av大片| 亚洲一区二区三区视频播放| 成人精品久久一区二区三区| 欧美日韩免费一区| 欧美日产国产成人免费图片| 精品五月天久久| 97热在线精品视频在线观看| 国产丝袜精品第一页| 日韩成人在线免费观看| 日韩欧美大尺度| 欧美一区深夜视频| 欧美激情在线观看| 久久韩剧网电视剧| 亚洲国产日韩欧美综合久久| 日韩欧美中文字幕在线观看| 欧美激情一区二区三区在线视频观看| 亚洲电影成人av99爱色| 亚洲天堂免费观看|