惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
C
Check Point Blog
Vercel News
Vercel News
Y
Y Combinator Blog
G
Google Developers Blog
P
Proofpoint News Feed
WordPress大学
WordPress大学
MongoDB | Blog
MongoDB | Blog
博客园 - 司徒正美
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
L
LangChain Blog
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
博客园_首页
B
Blog RSS Feed
The Cloudflare Blog
MyScale Blog
MyScale Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Security Blog
Microsoft Security Blog

博客园 - 冰凌水心

导入文本格式数据到数据库中 截取字符串中数字和字母函数 GridView在RowCommand取得当前行和列的值 NHibernate学习笔记收藏 javascript小技巧 全/半角转换,间繁体转换 常用JS (转) UrlRewrite、地址映射技术 返回距离指定日期的天数 截断字符,如果文章字数超过指定字符个数,用省列号代替 数字转汉字函数(转自http://www.cnblogs.com/deadshot123/archive/2006/11/18/564521.html) IBM Rational AppScan:跨站点脚本攻击深入解析 常用正则表达式 链接 SQL2005的一点记录 将文字内容和图片插入到 Access 数据库 Repeater嵌套Repeater实现分类并绑定分页 只查询当前页 改写别人的分页控件代码(有加密) 改写别人的分页控件代码
类实现.NET框架下的加密和解密(网上找来的,忘记是哪位大侠的...
冰凌水心 · 2008-08-22 · via 博客园 - 冰凌水心

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System;
using System.Security.Cryptography;
using System.IO;
using System.Text;

/// <summary>
/// Security 的摘要说明
/// Security类实现.NET框架下的加密和解密。
/// </summary>
namespace PTFair.WebSites.Common
{
    public class Security
    {
        string _QueryStringKey = ConfigurationSettings.AppSettings["CryptionKey"]; //URL传输参数加密Key
        string _PassWordKey = "hgfedcba";//PassWord加密Key
        public Security()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

        ///
        /// 加密URL传输的字符串
        ///
        public string EncryptQueryString(string QueryString)
        {
            return Encrypt(QueryString, _QueryStringKey);
        }

        ///
        /// 解密URL传输的字符串
        ///
        public string DecryptQueryString(string QueryString)
        {
            return Decrypt(QueryString, _QueryStringKey);
        }

        ///
        /// 加密帐号口令
        ///
        public string EncryptPassWord(string PassWord)
        {
            return Encrypt(PassWord, _PassWordKey);
        }

        ///
        /// 解密帐号口令
        ///
        public string DecryptPassWord(string PassWord)
        {
            return Decrypt(PassWord, _PassWordKey);
        }

        ///
        /// DEC 加密过程
        ///
        public string Encrypt(string pToEncrypt, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();//把字符串放到byte数组中

            byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
            //byte[]inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);//建立加密对象的密钥和偏移量
            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); //原文使用ASCIIEncoding.ASCII方法的GetBytes方法
            MemoryStream ms = new MemoryStream(); //使得输入密码必须输入英文文本
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat("{0:X2}", b);
            }

            ret.ToString();
            return ret.ToString();
        }

        ///
        /// DEC 解密过程
        ///
        public string Decrypt(string pToDecrypt, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            int len = pToDecrypt.Length / 2;
            byte[] inputByteArray = new byte[len];
            for (int x = 0; x < len; x++)
            {
                int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
                inputByteArray[x] = (byte)i;
            }
            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);//建立加密对象的密钥和偏移量,此值重要,不能修改
            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();//建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象
            return System.Text.Encoding.Default.GetString(ms.ToArray());
        }

        ///
        /// 检查己加密的字符串是否与原文相同
        ///
        public bool ValidateString(string EnString, string FoString, int Mode)
        {
            switch (Mode)
            {
                default:
                case 1:
                    if (Decrypt(EnString, _QueryStringKey) == FoString.ToString())
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                case 2:
                    if (Decrypt(EnString, _PassWordKey) == FoString.ToString())
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
            }
        }
    }
}