哈希(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开始对其使用哈希,将获得的哈希值与目标比较,若相同,则此值就是目标哈希值的一个碰撞,即被破译。
using System;
using System.Web.Security; namespace HashAndEncrypt
{
/// <summary>
/// MD5攻击工具类
/// </summary>
public sealed class MD5AttackHelper
{
/// <summary>
/// 对MD5进行穷举攻击
/// </summary>
/// <param name="hashString">杂凑串</param>
/// <returns>杂凑串的源串或源串碰撞(攻击失败则返回null)</returns>
public static string AttackMD5(string hashString)
{
for (int i = ; i <= ; i++)
{
string testString = i.ToString();
while (testString.Length < )
testString = "" + testString; if (FormsAuthentication.HashPasswordForStoringInConfigFile(testString, "MD5") == hashString)
return testString;
} return null;
}
}
}
此法容易破译那些简单口令例如“000000”或“123456”等。
5、多重混合哈希(Hash)
为了避免简单口令被穷举法破译,使用多重混合哈希:
假设字符串key,目标口令A的哈希值R=SHA1(MD5(A)*MD5(key))
using System;
using System.Web.Security; namespace HashAndEncrypt
{
/// <summary>
/// 多重混合哈希工具类
/// </summary>
public sealed class HashHelper
{
private static readonly String hashKey = "qwer#&^Buaa06";
/// <summary>
/// 对敏感数据进行多重混合哈希
/// </summary>
/// <param name="source">待处理明文</param>
/// <returns>Hasn后的数据</returns>
public static String Hash(String source)
{
String hashCode = FormsAuthentication.HashPasswordForStoringInConfigFile(source, "MD5") +
FormsAuthentication.HashPasswordForStoringInConfigFile(hashKey, "MD5");
return FormsAuthentication.HashPasswordForStoringInConfigFile(hashCode, "SHA1");
}
}
}
*整理来源:http://www.cnblogs.com/leoo2sk/archive/2010/10/01/hash-and-encrypt.html
哈希(Hash)与加密(Encrypt)相关内容的更多相关文章
- 哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
0.摘要 今天看到吉日嘎拉的一篇关于管理软件中信息加密和安全的文章,感觉非常有实际意义.文中作者从实践经验出发,讨论了信息管理软件中如何通过哈希和加密进行数据保护.但是从文章评论中也可以看出很多朋友对 ...
- 【转】哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
0.摘要 今天看到吉日嘎拉的一篇关于管理软件中信息加密和安全的文章,感觉非常有实际意义.文中作者从实践经验出发,讨论了信息管理软件中如何通过哈希和加密进行数据保护.但是从文章评论中也可以看出很多朋友对 ...
- 复习做UWP时涉及到的几种加密签名相关
本人菜鸟一枚,大学里凭兴趣学了一点WP的皮毛,后来又幸运(或者不幸)的进了一家专注于Windows生态的公司做了一段时间的UWP.在博客园写点自己遇到的东西,作为分享,也作为自己的备忘,如果有错误的地 ...
- 有关https安全的相关内容介绍
Https 介绍什么是Https HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道.简单讲是H ...
- C# 通过比对哈希码判断两个文件内容是否相同
1.使用System.security.Cryptography.HashAlgorithm类为每个文件生成一个哈希码,然后比较两个哈希码是否一致. 2. 在比较文件内容的时候可以采用好几种方法.例如 ...
- 哈希hash
定义 是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值 生成方法 hash() 哈希特性 不可逆 :在具备编码功能的同时,哈希算法也作为一种加密算 ...
- 区块链 - 哈希(Hash)
章节 区块链 – 介绍 区块链 – 发展历史 区块链 – 比特币 区块链 – 应用发展阶段 区块链 – 非对称加密 区块链 – 哈希(Hash) 区块链 – 挖矿 区块链 – 链接区块 区块链 – 工 ...
- linux用户权限相关内容查看
linux用户权限相关内容查看 1 用户信息 创建用户一个名为 webuser 的账号,并填写相应的信息: root@iZ94fabhqhuZ:~# adduser webuser Adding ...
- 简单讲解iOS应用开发中的MD5加密的相关使用<转>
这篇文章主要介绍了iOS应用开发中的MD5加密的相关使用,示例代码基于传统的Objective-C,需要的朋友可以参考下 一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POS ...
- 简单讲解iOS应用开发中的MD5加密的相关使用
简单讲解iOS应用开发中的MD5加密的相关使用 作者:文顶顶 字体:[增加 减小] 类型:转载 时间:2015-12-19 我要评论 这篇文章主要介绍了iOS应用开发中的MD5加密的相关使用, ...
随机推荐
- 检测cpu是否支持虚拟化和二级地址转换【转】
SLAT:二级地址转换 用微软的小工具“Coreinfo.exe” 下载地址是: http://technet.microsoft.com/en-us/sysinternals/cc835722 ...
- OpenSUSE 开启SSH 和网络设置
一.开启SSH 1.确认SSH包已安装. 2.确认防火墙没有拦截. 3.确认SSH服务已启动.4.确认SSH配置文件设置正确. 环境: SSH已安装,防火墙设置不清楚,SSH服务已启动,配置文件不清楚 ...
- JS添加父节点的方法。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- netty4.0.x源码分析—bootstrap
Bootstrap的意思就是引导,辅助的意思,在编写服务端或客户端程序时,我们都需要先new一个bootstrap,然后基于这个bootstrap调用函数,添加eventloop和handler,可见 ...
- 对象列表转换为DataTable或DataTable转换为对象列表.
/**********************************************************************************/ // 说明: 数据转换工具. ...
- textbox button 模拟fileupload
方案一: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.asp ...
- 前端面试题之Html和CSS
又到了毕业季,很多小伙伴们都到了找工作的时候了,好多小伙伴问我有前端的面试题么?答:没有. 呃呃… … 小伙伴本宝宝真的没有骗你们,我从毕业到现在一直在一家公司没有换过,所以手里压根没有面试题.我们公 ...
- Oracle表的建立条件
约束:1.非空约束a.字段不能为nullb.null 不等于 ''空字符串,oracle不允许把''写入到非空字符串型字段中2.主键约束a.指定某一列或某几列为主键列b.主键列必须具有非空约束c.主键 ...
- 更新证书错误:No matching provisioning profiles found
在Xcode中当你在更新了你得证书而再重新编译你的程序,真机调试会出现“Your build settings specify a provisioning profile with the UUID ...
- lombok介绍
Lombok是一种JavaArchive(JAR)文件,可用来消除Java代码的冗长.在写代码时,可以通过这个插件消除各种getter和setter,toString等常用方法. lombok 注解: ...