哈希(Hash)与加密(Encrypt)相关内容

1、哈希(Hash)与加密(Encrypt)的区别

哈希(Hash)是将目标文本转换成具有相同长度的、不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的、可逆的密文。

i.哈希算法往往被设计成生成具有相同长度的文本,而加密算法生成的文本长度与明文本身的长度有关。

例:设我们有两段文本:“Microsoft”和“Google”。两者使用某种哈希算法得到的结果分别为:“140864078AECA1C7C35B4BEB33C53C34”和“8B36E9207C24C76E6719268E49201D94”,而使用某种加密算法的到的结果分别为“Njdsptpgu”和“Hpphmf”。可以看到,哈希的结果具有相同的长度,而加密的结果则长度不同。实际上,如果使用相同的哈希算法,不论你的输入有多么长,得到的结果长度是一个常数,而加密算法往往与明文的长度成正比。

ii.哈希算法是不可逆的,而加密算法是可逆的。

这里的不可逆有两层含义,一是“给定一个哈希结果R,没有方法将E转换成原目标文本S”,二是“给定哈希结果R,即使知道一段文本S的哈希结果为R,也不能断言当初的目标文本就是S”。加密则不同,给定加密后的密文R,存在一种方法可以将R确定的转换为加密前的明文S。

2、哈希(Hash)与加密(Encrypt)的选择

如果被保护数据仅仅用作比较验证,在以后不需要还原成明文形式,则使用哈希;如果被保护数据在以后需要被还原成明文,则需要使用加密。

3、简单的一次哈希(Hash)

当前最常用的哈希(Hash)算法为MD5和SHA1

using System;
using System.Web.Security;

namespace HashAndEncrypt
{
    /// <summary>
    /// 哈希(Hash)工具类
    /// </summary>
    public sealed class HashHelper
    {
        /// <summary>
        /// 使用MD5算法进行哈希
        /// </summary>
        /// <param name="source">源字串</param>
        /// <returns>杂凑字串</returns>
        public static string MD5Hash(string source)
        {
            return FormsAuthentication.HashPasswordForStoringInConfigFile(source, "MD5");
        }

        /// <summary>
        /// 使用SHA1算法进行哈希
        /// </summary>
        /// <param name="source">源字串</param>
        /// <returns>杂凑字串</returns>
        public static string SHA1Hash(string source)
        {
            return FormsAuthentication.HashPasswordForStoringInConfigFile(source, "SHA1");
        }
    }
}

4、对简单的一次哈希(Hash)的攻击

主要有寻找碰撞法和穷举法。

i.寻找碰撞法:若能找出与要破译的口令的哈希值相等的口令即可。但目前对于MD5和SHA1没有有效的寻找碰撞法。

ii.穷举法:假设攻击范围为000000-999999,从000000开始对其使用哈希,将获得的哈希值与目标比较,若相同,则此值就是目标哈希值的一个碰撞,即被破译。

 1 using System;
 2 using System.Web.Security;
 3
 4 namespace HashAndEncrypt
 5 {
 6     /// <summary>
 7     /// MD5攻击工具类
 8     /// </summary>
 9     public sealed class MD5AttackHelper
10     {
11         /// <summary>
12         /// 对MD5进行穷举攻击
13         /// </summary>
14         /// <param name="hashString">杂凑串</param>
15         /// <returns>杂凑串的源串或源串碰撞(攻击失败则返回null)</returns>
16         public static string AttackMD5(string hashString)
17         {
18             for (int i = 0; i <= 999999; i++)
19             {
20                 string testString = i.ToString();
21                 while (testString.Length < 6)
22                     testString = "0" + testString;
23
24                 if (FormsAuthentication.HashPasswordForStoringInConfigFile(testString, "MD5") == hashString)
25                     return testString;
26             }
27
28             return null;
29         }
30     }
31 }
此法容易破译那些简单口令例如“000000”或“123456”等。

5、多重混合哈希(Hash)

为了避免简单口令被穷举法破译,使用多重混合哈希:

假设字符串key,目标口令A的哈希值R=SHA1(MD5(A)*MD5(key))

 1 using System;
 2 using System.Web.Security;
 3
 4 namespace HashAndEncrypt
 5 {
 6     /// <summary>
 7     /// 多重混合哈希工具类
 8     /// </summary>
 9     public sealed class HashHelper
10     {
11         private static readonly String hashKey = "qwer#&^Buaa06";
12         /// <summary>
13         /// 对敏感数据进行多重混合哈希
14         /// </summary>
15         /// <param name="source">待处理明文</param>
16         /// <returns>Hasn后的数据</returns>
17         public static String Hash(String source)
18         {
19             String hashCode = FormsAuthentication.HashPasswordForStoringInConfigFile(source, "MD5") +
20                               FormsAuthentication.HashPasswordForStoringInConfigFile(hashKey, "MD5");
21             return FormsAuthentication.HashPasswordForStoringInConfigFile(hashCode, "SHA1");
22         }
23     }
24 }

*整理来源:http://www.cnblogs.com/leoo2sk/archive/2010/10/01/hash-and-encrypt.html

时间: 2024-10-10 15:53:04

哈希(Hash)与加密(Encrypt)相关内容的相关文章

哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用

0.摘要 今天看到吉日嘎拉的一篇关于管理软件中信息加密和安全的文章,感觉非常有实际意义.文中作者从实践经验出发,讨论了信息管理软件中如何通过哈希和加密进行数据保护.但是从文章评论中也可以看出很多朋友对这个方面一些基本概念比较模糊,这样就容易“照葫芦画瓢”,不能根据自身具体情况灵活选择和使用各种哈希和加密方式.本文不对哈希和加密做过于深入的讨论,而是对哈希和加密的基本概念和原理进行阐述.比较,并结合具体实践说明如何选择哈希和加密算法.如何提高安全性等问题,使朋友们做到“知其然,知其所以然”,这样就

【转】哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用

0.摘要 今天看到吉日嘎拉的一篇关于管理软件中信息加密和安全的文章,感觉非常有实际意义.文中作者从实践经验出发,讨论了信息管理软件中如何通过哈希和加密进行数据保护.但是从文章评论中也可以看出很多朋友对这个方面一些基本概念比较模糊,这样就容易“照葫芦画瓢”,不能根据自身具体情况灵活选择和使用各种哈希和加密方式.本文不对哈希和加密做过于深入的讨论,而是对哈希和加密的基本概念和原理进行阐述.比较,并结合具体实践说明如何选择哈希和加密算法.如何提高安全性等问题,使朋友们做到“知其然,知其所以然”,这样就

有关https安全的相关内容介绍

Https 介绍什么是Https HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL Https的作用 内容加密 建立一个信息安全通道,来保证数据传输的安全; 身份认证 确认网站的真实性 数据完整性 防止内容被第三方冒充或者篡改Https的劣势 对数据进行加解密决定了它比http慢

C#数据Encrypt加密Encrypt解密的算法使用--非对称算法RSACryptoServiceProvider

C#数据加密解密的非对称算法使用---RSACryptoServiceProvider   Asymmetric algorithms--Encrypt Encrypt C#数据Encrypt加密Encrypt解密的相关算法可以参考System.Security.Cryptography,这个类库中包含MD5,SHA1,SHA256,SHA384,SHA512 MD5 and SHA256 are two of the HashAlgorithm subtypes provided by the

移动端 h5开发相关内容总结——CSS篇

移动端 h5开发相关内容总结——CSS篇 标签: css移动 2016-01-06 15:59 5536人阅读 评论(3) 收藏 举报  分类: HTML+CSS(17)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1.移动端开发视窗口的添加 h5端开发下面这段话是必须配置的 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=n

EF Code First 配置的相关内容

I.实体间一对一的关系 添加一个PersonPhoto类,表示用户照片类 1 /// <summary> 2 /// 用户照片类 3 /// </summary> 4 public class PersonPhoto 5 { 6 [Key] 7 public int PersonId { get ; set ; } 8 public byte [] Photo { get ; set ; } 9 public string Caption { get ; set ; } // 标题

大话Java中的哈希(hash)结构(一)

o( ̄▽ ̄)d 小伙伴们在上网或者搞程序设计的时候,总是会听到关于“哈希(hash)”的一些东西.比如哈希算法.哈希表等等的名词,那么什么是hash呢? 一.相关概念 1.hash算法:一类特殊的算法(注意哦,hash算法并不是某个固定的算法,而是一类特殊功能算法的统称). 2.哈希表(hash table).哈希映射(hash map).哈希集合(hash set):一种基于hash算法的数据结构. 3.哈希函数:在hash算法中的核心函数. 4.map:译为“映射”,是一种从键(key)到值

NSDictionary实现原理-ios哈希hash和isEqual

NSDictionary实现原理-ios哈希hash和isEqual OC中自定义类的NSCopying实现的注意事项(isEqual & hash实现) http://blog.csdn.net/linshaolie/article/details/41494303 iOS开发 之 不要告诉我你真的懂isEqual与hash! http://m.blog.csdn.net/hx_lei/article/details/53885798 http://www.jianshu.com/p/9153

【转帖】MATLAB 与 音频处理 相关内容摘记

MATLAB 与 音频处理 相关内容摘记 MATLAB 与 音频处理 相关内容摘记 MATLAB 与 音频处理 相关内容摘记 1 MATLAB 音频相关函数 1 MATLAB 处理音频信号的流程 2 音量标准化 2 声道分离合并与组合 3 数字滤波 3 数据转换 5 基于MATLAB 的数字滤波实验6 MATLAB 音频相关函数 声音数据输入输出函数: 可以方便地读写au和way文件,并可控制其中的位及频率. wavread()和wavwriteO. 声音播放: wavplay():播放wav声

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai