zoukankan      html  css  js  c++  java
  • 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,添加一个密码程序块。

    image

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

    image

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

    image

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

    image

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

    image

    image

    image

    保护模式选择的User

    image

    四,为项目添加添加引用

    image

    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)"

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

    冯瑞涛
  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/finehappy/p/1578026.html
Copyright © 2011-2022 走看看