2016年5月10日 星期二

C# 基本的加解密實作 (Aes)

在寫程式的過程中,當有存放某些敏感資料在資料庫時,也許就會使用加密。
即使資料被帶走,也不一定能解出來。
過幾年,科技進步了,當初的資料能破解時,就看資料是不是還是有用了。




            //流程
            //1.將字串轉為Byte,
            //2.把Byte變成加密的Byte
            //3.再轉成Base64字串 


 private string 基本的加密(string 要加密的字串, string 私鑰)
        {
            //加密參數為 Byte[] 所以要將字串轉為Byte[]
            byte[] 要加密的字串byte = Encoding.UTF8.GetBytes(要加密的字串);
            byte[] 祕密金鑰 = Encoding.UTF8.GetBytes(私鑰);
            byte[] 初始化向量 = Encoding.UTF8.GetBytes("我是初始化向量");
 
            //初始化向量(IV)與祕密金鑰(Key)有固定的長度,用雜湊過後的值可以是同樣的長度
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] 初始化向量byte = md5.ComputeHash(初始化向量);
            byte[] 祕密金鑰byte = md5.ComputeHash(祕密金鑰);
            
            //AES加解密演算法
            AesCryptoServiceProvider AES加解密演算法 = new AesCryptoServiceProvider();
            ICryptoTransform AES = AES加解密演算法.CreateEncryptor(祕密金鑰byte, 初始化向量byte);
                        
            byte[] 加密後的Byte = AES.TransformFinalBlock(要加密的字串byte, 0, 要加密的字串byte.Length);
            
            return Convert.ToBase64String(加密後的Byte);
        }


private string 基本的解密(string 要解密的字串, string 私鑰)
        {
            //解密參數為 Byte[] 所以要將字串轉為Byte[]
            byte[] 要解密的字串Byte = Convert.FromBase64String(要解密的字串);         
            byte[] 祕密金鑰 = Encoding.UTF8.GetBytes(私鑰);
            byte[] 初始化向量 = Encoding.UTF8.GetBytes("我是初始化向量");
 
            //初始化向量(IV)與祕密金鑰(Key)有固定的長度,用雜湊過後的值可以是同樣的長度
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] 初始化向量byte = md5.ComputeHash(初始化向量);
            byte[] 祕密金鑰byte = md5.ComputeHash(祕密金鑰);
 
            //AES加解密演算法
            AesCryptoServiceProvider AES加解密演算法 = new AesCryptoServiceProvider();
            ICryptoTransform AES = AES加解密演算法.CreateDecryptor(祕密金鑰byte, 初始化向量byte);
 
            byte[] 解密後的Byte = AES.TransformFinalBlock(要解密的字串Byte, 0, 要解密的字串Byte.Length);
            
            return Encoding.UTF8.GetString(解密後的Byte);
        }


Sample 範例
https://drive.google.com/open?id=0B1XxIr6Ve-glYm1Kekk3bHcyM3c

沒有留言:

張貼留言