C#编程总结(七)数据加密 - oop.com.cn_面向对象设计网站 - 面向对象技术开发

面向对象技术开发

会员投稿 投稿指南 站长资讯通告:
您的位置: 首页 > OOP语言 > C# > 正文

C#编程总结(七)数据加密

来源: www.bianceng.cn 阅读:

概述

数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代 码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的 途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其 原来数据的过程。加密建立在对信息进行数学编码和解码的基础上。加密类型分为两种,对称加密与非 对称加密,对称加密双方采用共同密钥。非对称加密,这种加密方式存在两个密钥,一个是公共密钥( 对外公开),一种是私人密钥(对外保密)。  

一、摘要算法

数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名 、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。数据摘要算法也被称为 哈希(Hash)算法或散列算法。

从严格意义上讲,摘要算法不是加密算法,但在具体应用中类似于加密算法使用,或者与加密算法一 起使用,这里也拿来介绍下。

应用范围:密码加密、数据完整性校验、数字签名等

这里介绍常用的两种摘要算法,MD5与SHA1。

提示:当前MD5已经被破解,推荐使用SHA1

1、MD5

哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串。 加密哈希函数有这样一 个属性:在计算上不大可能找到散列为相同的值的两个不同的输入;也就是说,两组数据的哈希值仅在 对应的数据也匹配时才会匹配。 数据的少量更改会在哈希值中产生不可预知的大量更改。MD5 算法的哈 希值大小为 128 位。

MD5 类的 ComputeHash 方法将哈希作为 16 字节的数组返回。 请注意,某些 MD5 实现会生成 32 字符的十六进制格式哈希。 若要与此类实现进行互操作,请将 ComputeHash 方法 的返回值格式化为十六进制值。

MD5加密:

/// <summary>
        /// MD5加密为32字符长度的16进制字符串
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string EncryptByMD5(string input)
        {
            MD5 md5Hasher = MD5.Create();
            byte[] data = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(input));
    
            StringBuilder sBuilder = new StringBuilder();
            //将每个字节转为16进制
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }
    
            return sBuilder.ToString();            
        }

2、SHA1

计算输入数据的 SHA1 哈希值。

哈希值用作表示大量数据的固定大小的唯一值。 如果相应的数据也匹配,则两个数据集的哈希应该 匹配。 数据的少量更改会在哈希值中产生不可预知的大量更改。

SHA1 算法的哈希值大小为 160 位 。

SHA1加密:

/// <summary>
        /// SHA1加密
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string EncryptBySHA1(string input)
        {
            SHA1 sha = new SHA1CryptoServiceProvider();          
            byte[] bytes = Encoding.Unicode.GetBytes(input);
            byte[] result = sha.ComputeHash(bytes);
            return BitConverter.ToString(result);
        }

Tags:
相关文章列表: