/// <summary>
        /// 加密函式
        /// </summary>
        /// <param name="string_secretContent">欲加密字串</param>
        /// <param name="string_pwd">鹽(Salt)</param>
        /// <returns></returns>
        private string encrypt(string string_secretContent, string string_pwd)
        {
            //密碼轉譯一定都是用byte[] 所以把string都換成byte[]
            byte[] byte_secretContent = Encoding.UTF8.GetBytes(string_secretContent);
            byte[] byte_pwd = Encoding.UTF8.GetBytes(string_pwd);

            //加解密函數的key通常都會有固定的長度 而使用者輸入的key長度不定 因此用hash過後的值當做key
            MD5CryptoServiceProvider provider_MD5 = new MD5CryptoServiceProvider();
            byte[] byte_pwdMD5 = provider_MD5.ComputeHash(byte_pwd);

            //產生加密實體 如果要用其他不同的加解密演算法就改這裡(ex:3DES)
            RijndaelManaged provider_AES = new RijndaelManaged();
            ICryptoTransform encrypt_AES = provider_AES.CreateEncryptor(byte_pwdMD5, byte_pwdMD5);

            //output就是加密過後的結果
            byte[] output = encrypt_AES.TransformFinalBlock(byte_secretContent, 0, byte_secretContent.Length);
            return Convert.ToBase64String(output);
        }

        /// <summary>
        /// 解密函式
        /// </summary>
        /// <param name="ciphertext">欲解密字串</param>
        /// <param name="string_pwd">鹽(Salt)</param>
        /// <returns></returns>
        private string decrypt(string ciphertext, string string_pwd)
        {
            byte[] byte_ciphertext = Convert.FromBase64String(ciphertext);
            //密碼轉譯一定都是用byte[] 所以把string都換成byte[]
            byte[] byte_pwd = Encoding.UTF8.GetBytes(string_pwd);

            //加解密函數的key通常都會有固定的長度 而使用者輸入的key長度不定 因此用hash過後的值當做key
            MD5CryptoServiceProvider provider_MD5 = new MD5CryptoServiceProvider();
            byte[] byte_pwdMD5 = provider_MD5.ComputeHash(byte_pwd);

            //產生解密實體
            RijndaelManaged provider_AES = new RijndaelManaged();
            ICryptoTransform decrypt_AES = provider_AES.CreateDecryptor(byte_pwdMD5, byte_pwdMD5);

            //string_secretContent就是解密後的明文
            byte[] byte_secretContent = decrypt_AES.TransformFinalBlock(byte_ciphertext, 0, byte_ciphertext.Length);
            string string_secretContent = Encoding.UTF8.GetString(byte_secretContent);
            return string_secretContent;
        }

arrow
arrow
    全站熱搜

    alen1985 發表在 痞客邦 留言(0) 人氣()