摘要的一些知识Word文件下载.docx
《摘要的一些知识Word文件下载.docx》由会员分享,可在线阅读,更多相关《摘要的一些知识Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
⑤好的摘要算法,没有人能从中找到“碰撞”,虽然“碰撞”是肯定存在的。
即对于给定的一个摘要,不可能找到一条信息使其摘要正好是给定的。
或者说,无法找到两条消息,是它们的摘要相同。
一般地,把对一个信息的摘要称为该消息的指纹或数字签名。
数字签名是保证信息的完整性和不可否认性的方法。
数据的完整性是指信宿接收到的消息一定是信源发送的信息,而中间绝无任何更改;
信息的不可否认性是指信源不能否认曾经发送过的信息。
其实,通过数字签名还能实现对信源的身份识别(认证),即确定“信源”是否是信宿意定的通信伙伴。
数字签名应该具有唯一性,即不同的消息的签名是不一样的;
同时还应具有不可伪造性,即不可能找到另一个消息,使其签名与已有的消息的签名一样;
还应具有不可逆性,即无法根据签名还原被签名的消息的任何信息。
这些特征恰恰都是消息摘要算法的特征,所以消息摘要算法适合作为数字签名算法。
数字签名方案是一种以电子形式存储消息签名的方法。
一个完整的数字签名方案应该由两部分组成:
签名算法和验证算法。
一般地说,任何一个公钥密码体制都可以单独地作为一种数字签名方案使用。
如RSA作为数字签名方案使用时,可以定义如下:
这种签名实际上就是用信源地私钥加密消息,加密后地消息即成了签体;
而用对应地公钥进行验证,若公钥解密后的消息与原来的消息相同,则消息是完整的,否则消息不完整。
它正好和公钥密码用于消息保密是相反的过程。
因为只有信源才拥有自己地私钥,别人无法重新加密源消息,所以即使有人截获且更改了源消息,也无法重新生成签体,因为只有用信源的私钥才能形成正确地签体。
同样信宿只要验证用信源的公钥解密的消息是否与明文消息相同,就可以知道消息是否被更改过,而且可以认证消息是否是确实来自意定的信源,还可以使信源不能否认曾将发送的消息。
所以这样可以完成数字签名的功能但这种方案过于单纯,它仅可以保证消息的完整性,而无法确保消息的保密性。
而且这种方案要对所有的消息进行加密操作,这在消息的长度比较大时,效率使非常低的,主要原因在于公钥体制的加解密过程的低效性。
所以这种方案一般不可取。
几乎所有的数字签名方案都要和快速高效的摘要算法(Hash函数)一起使用,当公钥算法与摘要算法结合起来使用时,便构成了一种有效地数字签名方案。
这个过程是:
首先用摘要算法对消息进行摘要,然后在把摘要值用信源的私钥加密;
接收方先把接收的明文用同样的摘要算法摘要,形成“准签体”,然后再把准签体与用信源的公钥解密出的“签体”进行比较,如果相同就认为消息是完整的,否则消息不完整。
这种方法使公钥加密只对消息摘要进行操作,因为一种摘要算法的摘要消息长度是固定的,而且都比较“短”(相对于消息而言),正好符合公钥加密的要求。
这样效率得到了提高,而其安全性也并未因为使用摘要算法而减弱
消息摘要算法简介
一、什么是消息摘要算法
消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。
现在,消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法。
著名的摘要算法有RSA公司的MD5算法和SHA-1算法及其大量的变体。
二、消息摘要的特征
消息摘要是把任意长度的输入柔和而产生长度固定的伪随机输入的算法。
三、消息摘要的应用——数字签名
一般地,把对一个信息的摘要称为该消息的指纹或数字签名。
数字签名应该具有唯一性,即不同的消息的签名是不一样的;
数字签名方案是一种以电子形式存储消息签名的方法。
这种签名实际上就是用信源地私钥加密消息,加密后地消息即成了签体;
所以这样可以完成数字签名的功能
但这种方案过于单纯,它仅可以保证消息的完整性,而无法确保消息的保密性。
几乎所有的数字签名方案都要和快速高效的摘要算法(Hash函数)一起使用,当公钥算法与摘要算法结合起来使用时,便构成了一种有效地数字签名方案。
这种方法使公钥加密只对消息摘要进行操作,因为一种摘要算法的摘要消息长度是固定的,而且都比较“短”(相对于消息而言),正好符合公钥加密的要求。
这样效率得到了提高,而其安全性也并未因为使用摘要算法而减弱。
我这有个加密的帮助,你试试看看
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Text;
System.IO;
System.Data;
System.Diagnostics;
System.Security;
System.Security.Cryptography;
namespace
Encrypt
{
///
<
summary>
类名:
HashEncrypt
作用:
对传入的字符串进行Hash运算,返回通过Hash算法加密过的字串。
属性:
[无]
构造函数额参数:
IsReturnNum:
是否返回为加密后字符的Byte代码
IsCaseSensitive:
是否区分大小写。
方法:
此类提供MD5,SHA1,SHA256,SHA512等四种算法,加密字串的长度依次增大。
/summary>
public
class
HashEncrypt
//private
string
strIN;
private
bool
isReturnNum;
isCaseSensitive;
构造函数
param
name="
IsCaseSensitive"
>
/param>
IsReturnNum"
是否返回为加密后字符的Byte代码。
HashEncrypt(bool
IsCaseSensitive,
IsReturnNum)
this.isReturnNum
=
IsReturnNum;
this.isCaseSensitive
IsCaseSensitive;
}
检测是否区分大小写
strIN"
字符串<
returns>
/returns>
getstrIN(string
strIN)
//string
strIN
if
(strIN.Length
==
0)
"
~NULL~"
;
(isCaseSensitive
false)
//不区分大小写
strIN.ToUpper();
return
MD5加密与解密
待加密或解密的字符串<
加密或解密后的字符串<
MD5Encrypt(string
getstrIN(strIN);
byte[]
tmpByte;
MD5
md5
new
MD5CryptoServiceProvider();
tmpByte
md5.ComputeHash(GetKeyByteArray(getstrIN(strIN)));
md5.Clear();
GetStringValue(tmpByte);
SHA1加密与解密
SHA1Encrypt(string
SHA1
sha1
SHA1CryptoServiceProvider();
sha1.ComputeHash(GetKeyByteArray(strIN));
sha1.Clear();
SHA256加密与解密
SHA256Encrypt(string
SHA256
sha256
SHA256Managed();
sha256.ComputeHash(GetKeyByteArray(strIN));
sha256.Clear();
SHA512加密与解密
SHA512Encrypt(string
SHA512
sha512
SHA512Managed();
sha512.ComputeHash(GetKeyByteArray(strIN));
sha512.Clear();
使用DES加密
originalValue"
待加密的字符串<
key"
密钥(最大长度8)<
IV"
初始化向量(最大长度8)<
加密后的字符串<
DESEncrypt(string
originalValue,
key,
IV)
//将key和IV处理成8个字符
key
+=
12345678"
IV
key.Substring(0,
8);
IV.Substring(0,
SymmetricAlgorithm
sa;
ICryptoTransform
ct;
MemoryStream
ms;
CryptoStream
cs;
byt;
sa
DESCryptoServiceProvider();
sa.Key
Encoding.UTF8.GetBytes(key);
sa.IV
Encoding.UTF8.GetBytes(IV);
ct
sa.CreateEncryptor();
byt
Encoding.UTF8.GetBytes(originalValue);
ms
MemoryStream();
cs
CryptoStream(ms,
ct,
CryptoStreamMode.Write);
cs.Write(byt,
0,
byt.Length);
cs.FlushFinalBlock();
cs.Close();
Convert.ToBase64String(ms.ToArray());
key)
DESEncrypt(originalValue,
key);
使用DES解密
encryptedValue"
待解密的字符串<
m初始化向量(最大长度8)<
解密后的字符串<
DESDecrypt(string
encryptedValue,