Enterprise Library 4.1 Cryptography Block 快速使用图文笔记

哈希算法------ http://baike.baidu.com/view/273836.htm 可以用于校验数据是否更改

对称加密算法-- http://baike.baidu.com/view/7591.htm 可以使用**,加密及反算

一,下载并安装好Enterprise Library 4.1

二,新建一个Web应用程序

三,右键点击Web.Config 文件 使用 Edit Enterprise Library Configuration 可以编辑Web.Config,添加一个密码程序块。

Enterprise Library 4.1 Cryptography Block 快速使用图文笔记

右击Hash 和 Symmetric 节点可以添加 算法规则 Provider

Enterprise Library 4.1 Cryptography Block 快速使用图文笔记

Hash 不使用自定义Provider,直接使用 算法规则 Proovider,这个时候会弹出窗口让你选择可以使用算法规则,这里使用SHA256

Enterprise Library 4.1 Cryptography Block 快速使用图文笔记

Symmetric 除了自定义,可以使用DPAPI(针对用户和硬件加密)和 算法规则两种方式,这里我们选择使用算法规则选项,在弹出的对话框选择RC2算法

Enterprise Library 4.1 Cryptography Block 快速使用图文笔记

弹出Key生成向导对话框,新建一个Key,保存

Enterprise Library 4.1 Cryptography Block 快速使用图文笔记

Enterprise Library 4.1 Cryptography Block 快速使用图文笔记

Enterprise Library 4.1 Cryptography Block 快速使用图文笔记

保护模式选择的User

Enterprise Library 4.1 Cryptography Block 快速使用图文笔记

四,为项目添加添加引用

Enterprise Library 4.1 Cryptography Block 快速使用图文笔记

using Microsoft.Practices.EnterpriseLibrary.Security.Cryptography;
using System.Text;

五,编写代码(代码源自于菩提树下的杨过)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Microsoft.Practices.EnterpriseLibrary.Security.Cryptography;
using System.Text;

namespace CryptographyBlock
{
    public partial class _Default : System.Web.UI.Page
    {
        //这二个值必须与web.config相关Providers中的name一致
        private const string hashProvider = "SHA256Managed";
        private const string symmProvider = "RC2CryptoServiceProvider";


        protected void Page_Load(object sender, EventArgs e)
        {

        }

        /// <summary>
        /// 生成Hash散列值
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnHash_Click(object sender, EventArgs e)
        {
            byte[] valueToHash = Encoding.Default.GetBytes(txtOriginal.Text);

            byte[] generatedHash = Cryptographer.CreateHash(hashProvider, valueToHash);

            // Clear the byte array memory
            Array.Clear(valueToHash, 0, valueToHash.Length);

            lHash.Text = Convert.ToBase64String(generatedHash);
        }

        /// <summary>
        /// 比较Hash散列值
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnCompare_Click(object sender, EventArgs e)
        {
            byte[] valueToHash = System.Text.Encoding.UTF8.GetBytes(txtCompare.Text);

            if (lHash.Text != "")
            {
                bool matched = Cryptographer.CompareHash(hashProvider, valueToHash, Convert.FromBase64String(lHash.Text));

                // Clear the byte array memory
                Array.Clear(valueToHash, 0, valueToHash.Length);

                if (matched)
                {
                    lCompare.Text = "<span style='color:green'>该字符串未被篡改过!</span>";
                }
                else
                {
                    lCompare.Text = "<span style='color:red'>该字符串被修改过了!</span>";
                }
            }
        }

        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnEncrypt_Click(object sender, EventArgs e)
        {
            lEncrypt.Text = Cryptographer.EncryptSymmetric(symmProvider, txtOriginal2.Text);
            txtEncrypt.Text  = lEncrypt.Text;
        }

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnDecrypt_Click(object sender, EventArgs e)
        {
            try
            {
                lDecrypt.Text = Cryptographer.DecryptSymmetric(symmProvider, txtEncrypt.Text);
            }
            catch
            {
                lDecrypt.Text = "反解失败";
            }
        }
    }

}

六,添加生成事件脚本,复制Config,没有Config会报错

copy "$(ProjectDir)\*.config" "$(TargetDir)"

Enterprise Library 4.1 Cryptography Block 快速使用图文笔记
示例源码下载:EL41Sample.rar
Enterprise Library 4.1 目录:Enterprise Library 4.1 快速使用图文笔记 目录

posted on 2009-10-04 20:10 冯瑞涛 阅读(...) 评论(...) 编辑 收藏