1. 计算机网络CRC检验中为什么选择16或32位效验码,效率最高
循环冗余校验(CRC)是一种根据网络数据封包或电脑档案等数据产生少数固定位数的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。一般来说,循环冗余校验的值都是32位的整数。由于本函数易于用二进制的电脑硬件使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。它是由W.WesleyPeterson在他1961年发表的论文中披露[1]。{{noteTA|T=zh-hans:循环冗余校验;zh-hant:循环冗余校验;|1=zh-hans:循环冗余校验;zh-hant:循环冗余校验;}}'''循环冗余校验'''(CRC)是一种根据网路数据封包或[[电脑档案]]等数据产生少数固定位数的一种[[散列函数]],主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。一般来说,循环冗余校验的值都是32位的整数。由于本函数易于用二进制的[[电脑硬件]]使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。它是由[[W.WesleyPeterson]]在他1961年发表的论文中披露{{citejournal|author=Peterson,W.W.andBrown,D.T.|year=1961|month=January|title=CyclicCodesforErrorDetection|journal=ProceedingsoftheIRE|doi=10.1109/JRPROC.1961.287814|issn=0096-8390|volume=49|pages=228}}。==简介==CRC“校验和”是两个位元数据流采用二进制除法(没有进位,使用XOR异或来代替减法)相除所得到的余数。其中被除数是需要计算校验和的信息数据流的二进制表示;除数是一个长度为n+1的预定义(短)的二进制数,通常用多项式的系数来表示。在做除法之前,要在信息数据之后先加上n个0.CRCa是基于[[有限域]]GF(2)([[同余|关于2同余]])的[[多项式环]]。简单的来说,就是所有系数都为0或1(又叫做二进制)的多项式系数的集合,并且集合对于所有的代数操作都是封闭的。例如::(x^3+x)+(x+1)=x^3+2x+1\equivx^3+12会变成0,因为对系数的加法都会模2.乘法也是类似的::(x^2+x)(x+1)=x^3+2x^2+x\equivx^3+x我们同样可以对多项式作除法并且得到商和余数。例如,如果我们用''x''3+''x''2+''x''除以''x''+1。我们会得到::\frac{(x^3+x^2+x)}{(x+1)}=(x^2+1)-\frac{1}{(x+1)}也就是说,:(x^3+x^2+x)=(x^2+1)(x+1)-1这里除法得到了商''x''2+1和余数-1,因为是奇数所以最后一位是1。字符串中的每一位其实就对应了这样类型的多项式的系数。为了得到CRC,我们首先将其乘以x^{n},这里n是一个固定多项式的[[多项式的阶|阶]]数,然后再将其除以这个固定的多项式,余数的系数就是CRC。在上面的等式中,x^2+x+1表示了本来的信息位是111,x+1是所谓的'''钥匙''',而余数1(也就是x^0)就是CRC.key的最高次为1,所以我们将原来的信息乘上x^1来得到x^3+x^2+x,也可视为原来的信息位补1个零成为1110。一般来说,其形式为::M(x)\cdotx^{n}=Q(x)\cdotK(x)+R(x)这里M(x)是原始的信息多项式。K(x)是n阶的“钥匙”多项式。M(x)\cdotx^{n}表示了将原始信息后面加上n个0。R(x)是余数多项式,既是CRC“校验和”。在通讯中,发送者在原始的信息数据M后加上n位的R(替换本来附加的0)再发送。接收者收到M和R后,检查M(x)\cdotx^{n}-R(x)是否能被K(x)整除。如果是,那么接收者认为该信息是正确的。值得注意的是M(x)\cdotx^{n}-R(x)就是发送者所想要发送的数据。这个串又叫做''codeword''.CRCs经常被叫做“[[校验和]]”,但是这样的说法严格来说并不是准确的,因为技术上来说,校验“和”是通过加法来计算的,而不是CRC这里的除法。“[[错误纠正编码]]”常常和CRCs紧密相关,其语序纠正在传输过程中所产生的错误。这些编码方式常常和数学原理紧密相关。==实现====变体==CRC有几种不同的变体*shiftRegister可以逆向使用,这样就需要检测最低位的值,每次向右移动一位。这就要求polynomial生成逆向的数据位结果。''实际上这是最常用的一个变体。''*可以先将数据最高位读到移位寄存器,也可以先读最低位。在通讯协议中,为了保留CRC的[[突发错误]]检测特性,通常按照[[物理层]]发送数据位的方式计算CRC。*为了检查CRC,需要在全部的码字上进行CRC计算,而不是仅仅计算消息的CRC并把它与CRC比较。如果结果是0,那么就通过这项检查。这是因为码字M(x)\cdotx^{n}-R(x)=Q(x)\cdotK(x)可以被K(x)整除。*移位寄存器可以初始化成1而不是0。同样,在用算法处理之前,消息的最初n个数据位要取反。这是因为未经修改的CRC无法区分只有起始0的个数不同的两条消息。而经过这样的取反过程,CRC就可以正确地分辨这些消息了。*CRC在附加到消息数据流的时候可以进行取反。这样,CRC的检查可以用直接的方法计算消息的CRC、取反、然后与消息数据流中的CRC比较这个过程来完成,也可以通过计算全部的消息来完成。在后一种方法中,正确消息的结果不再是0,而是\sum_{i=n}^{2n-1}x^{i}除以K(x)得到的结果。这个结果叫作核验多项式C(x),它的十六进制表示也叫作[[幻数]]。按照惯例,使用CRC-32多项式以及CRC-16-CCITT多项式时通常都要取反。CRC-32的核验多项式是C(x)=x^{31}+x^{30}+x^{26}+x^{25}+x^{24}+x^{18}+x^{15}+x^{14}+x^{12}+x^{11}+x^{10}+x^8+x^6+x^5+x^4+x^3+x+1。==错误检测能力==CRC的错误检测能力依赖于关键多项式的阶次以及所使用的特定关键多项式。''误码多项式''E(x)是接收到的消息码字与正确消息码字的''异或''结果。当且仅当误码多项式能够被CRC多项式整除的时候CRC算法无法检查到错误。*由于CRC的计算基于除法,任何多项式都无法检测出一组全为零的数据出现的错误或者前面丢失的零。但是,可以根据CRC的[[#变体|变体]]来解决这个问题。*所有只有一个数据位的错误都可以被至少有两个非零系数的任意多项式检测到。误码多项式是x^k,并且x^k只能被i\lek的多项式x^i整除。*CRC可以检测出所有间隔距离小于[[多项式阶次]]的双位错误,在这种情况下的误码多项式是E(x)=x^i+x^k=x^k\cdot(x^{i-k}+1),\;i>k。如上所述,x^k不能被CRC多项式整除,它得到一个x^{i-k}+1项。根据定义,满足多项式整除x^{i-k}+1的{i-k}最小值就是多项是的阶次。最高阶次的多项式是[[本原多项式]],带有二进制系数的n阶多项式==CRC多项式规范==下面的表格略去了“初始值”、“反射值”以及“最终异或值”。*对于一些复杂的校验和来说这些十六进制数值是很重要的,如CRC-32以及CRC-64。通常小于CRC-16的CRC不需要使用这些值。*通常可以通过改变这些值来得到各自不同的校验和,但是校验和算法机制并没有变化。CRC标准化问题*由于CRC-12有三种常用的形式,所以CRC-12的定义会有歧义*在应用的CRC-8的两种形式都有数学上的缺陷。*据称CRC-16与CRC-32至少有10种形式,但没有一种在数学上是最优的。*同样大小的CCITTCRC与ITUCRC不同,这个机构在不同时期定义了不同的校验和。==常用CRC(按照ITU-IEEE规范)=={|class="wikitable"!名称||多项式||表示法:正常或者翻转|-|CRC-1||x+1(用途:硬件,也称为[[奇偶校验位]])||0x1or0x1(0x1)|-|CRC-5-CCITT||x^{5}+x^{3}+x+1([[ITU]]G.704标准)||0x15(0x??)|-|CRC-5-USB||x^{5}+x^{2}+1(用途:[[USB]]信令包)||0x05or0x14(0x9)|-|CRC-7||x^{7}+x^{3}+1(用途:通信系统)||0x09or0x48(0x11)|-|CRC-8-ATM||x^8+x^2+x+1(用途:ATMHEC)||0x07or0xE0(0xC1)|-|CRC-8-[[CCITT]]||x^8+x^7+x^3+x^2+1(用途:[[1-Wire]][[总线]])|||-|CRC-8-[[Dallas_Semiconctor|Dallas]]/[[Maxim_IC|Maxim]]||x^8+x^5+x^4+1(用途:[[1-Wire]][[bus]])||0x31or0x8C|-|CRC-8||x^8+x^7+x^6+x^4+x^2+1||0xEA(0x??)|-|CRC-10||x10+x9+x5+x4+x+1||0x233(0x????)|-|CRC-12||x^{12}+x^{11}+x^3+x^2+x+1(用途:通信系统)||0x80For0xF01(0xE03)|-|CRC-16-Fletcher||参见[[Fletcher'schecksum]]||用于[[Adler-32]]A&BCRC|-|CRC-16-CCITT||''x''16+''x''12+''x''5+1([[X25]],[[V.41]],[[Bluetooth]],[[PPP]],[[IrDA]])||0x1021or0x8408(0x0811)|-|CRC-16-[[IBM]]||''x''16+''x''15+''x''2+1||0x8005or0xA001(0x4003)|-|CRC-16-[[BBS]]||x16+x15+x10+x3(用途:[[XMODEM]]协议)||0x8408(0x????)|-|CRC-32-Adler||See[[Adler-32]]||参见[[Adler-32]]|-|CRC-32-MPEG2||See[[IEEE802.3]]||参见[[IEEE802.3]]|-|CRC-32-[[IEEE802.3]]||x^{32}+x^{26}+x^{23}+x^{22}+x^{16}+x^{12}+x^{11}+x^{10}+x^8+x^7+x^5+x^4+x^2+x+1||0x04C11DB7or0xEDB88320(0xDB710641)|-|CRC-32C(Castagnoli)||x^{32}+x^{28}+x^{27}+x^{26}+x^{25}+x^{23}+x^{22}+x^{20}+x^{19}+x^{18}+x^{14}+x^{13}+x^{11}+x^{10}+x^9+x^8+x^6+1||0x1EDC6F41or0x82F63B78(0x05EC76F1)|-|CRC-64-ISO||x^{64}+x^4+x^3+x+1(use:ISO3309)||(0xB000000000000001)|-|CRC-64-[[EcmaInternational|ECMA]]-182||x^{64}+x^{62}+x^{57}+x^{55}+x^{54}+x^{53}+x^{52}+x^{47}+x^{46}+x^{45}+x^{40}+x^{39}+x^{38}+x^{37}+x^{35}+x^{33}+x^{32}+x^{31}+x^{29}+x^{27}+x^{24}+x^{23}+x^{22}+x^{21}+x^{19}+x^{17}+x^{13}+x^{12}+x^{10}+x^9+x^7+x^4+x+1(asdescribedin[CRC16toCRC64collisionresearch]*[index.htm#SAR-PR-2006-05ReversingCRC–TheoryandPractice.]{{math-stub}}[[Category:校验和算法]][[bg:CRC]][[ca:Controlderendànciacíclica]][[cs:Cyklickýrendantnísoučet]][[de:ZyklischeRendanzprüfung]][[en:Cyclicrendancycheck]][[es:Controlderendanciacíclica]][[eu:CRC]][[fi:CRC]][[fr:Contrôlederedondancecyclique]][[he:בדיקתיתירותמחזורית]][[id:CRC]][[it:Cyclicrendancycheck]][[ja:巡回冗长検査]][[ko:순환중복검사]][[nl:CyclicRendancyCheck]][[pl:CRC]][[pt:CRC]][[ru:Циклическийизбыточныйкод]][[simple:Cyclicrendancycheck]][[sk:Kontrolacyklickýmkódom]][[sv:CyclicRendancyCheck]][[vi:CRC]]
2. 散列算法的算法思想
我也只能说说思想
散列算法的算法就是争取一个萝卜一个坑的原则
比如说有5个数 12,25,30,45,50,这几个数有个规律,就是十位数都不相同,
如果我设置一个散列函数f(value)=value/10;平常的时候,我们查找50,要比较
5次(其他算法可能不同),这里用散列算法只需要1次,就是解散列函数,key=50/10
=5,要找的数就在第5个位子.但是上面问题还是很多的,比如说查找55呢?就会出
错<因为55解散列函数之后,也是在第5个位子>,还有等等等问题,很显然这个是我
散列函数没设置好,当你把散列函数设置好了后,由于数据的庞大,冲突很有可能
产生,那么就需要我们来处理冲突了,所以写散列算法就是设置好的散列函数和
处理冲突的过程.这里散列算法涉及的查找就跟查找的数量无关,跟冲突率有直接
的关系
3. 什么是安全散列算法SHA256
安全散列算法SHA(Secure Hash Algorithm)是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等变体。主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。下面以 SHA-1为例,介绍该算法计算消息摘要的原理。
对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。
SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。
一、术语和概念
(一)位(Bit),字节(Byte)和字(Word)
SHA1始终把消息当成一个位(bit)字符串来处理。本文中,一个“字”(Word)是32位,而一个“字节”(Byte)是8位。比如,字符串“abc”可以被转换成一个位字符串:01100001 01100010 01100011。它也可以被表示成16进制字符串:0x616263.
(二)运算符和符号
下面的逻辑运算符都被运用于“字”(Word)
X^Y = X,Y逻辑与
X \/ Y = X,Y逻辑或
X XOR Y= X,Y逻辑异或
~X = X逻辑取反
X+Y定义如下:
字 X 和Y 代表两个整数 x 和y, 其中0 <= x < 2^32 且 0 <= y < 2^32. 令整数z= (x + y) mod 2^32. 这时候 0 <= z < 2^32. 将z转换成字Z,那么就是 Z = X + Y.
循环左移位操作符Sn(X)。X是一个字,n是一个整数,0<=n<=32。Sn(X)= (X<>32-n)
X<定义如下:抛弃最左边的n位数字,将各个位依次向左移动n位,然后用0填补右边的n位(最后结果还是32位)。X>>n是抛弃右边的n位,将各个位依次向右移动n位,然后在左边的n位填0。因此可以叫Sn(X)位循环移位运算
二、SHA1算法描述
在SHA1算法中,我们必须把原始消息(字符串,文件等)转换成位字符串。SHA1算法只接受位作为输入。假设我们对字符串“abc”产生消息摘要。首先,我们将它转换成位字符串如下:
01100001 0110001001100011
―――――――――――――
‘a’=97 ‘b’=98‘c’=99
这个位字符串的长度为24。下面我们需要5个步骤来计算MD5。
(一)补位
消息必须进行补位,以使其长度在对512取模以后的余数是448。也就是说,(补位后的消息长度)%512 = 448。即使长度已经满足对512取模后余数是448,补位也必须要进行。
补位是这样进行的:先补一个1,然后再补0,直到长度满足对512取模后余数是448。总而言之,补位是至少补一位,最多补512位。还是以前面的“abc”为例显示补位的过程。
原始信息:01100001 01100010 01100011
补位第一步:0110000101100010 01100011 1
首先补一个“1”
补位第二步:0110000101100010 01100011 10…..0
然后补423个“0”
我们可以把最后补位完成后的数据用16进制写成下面的样子
61626380 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 00000000
现在,数据的长度是448了,我们可以进行下一步操作。
(二)补长度
所谓的补长度是将原始数据的长度补到已经进行了补位操作的消息后面。通常用一个64位的数据来表示原始消息的长度。如果消息长度不大于2^64,那么第一个字就是0。在进行了补长度的操作以后,整个消息就变成下面这样了(16进制格式)
61626380 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 00000018
如果原始的消息长度超过了512,我们需要将它补成512的倍数。然后我们把整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要。
(三)使用的常量
一系列的常量字K(0),K(1), ... , K(79),如果以16进制给出。它们如下:
Kt = 0x5A827999 (0<= t <= 19)
Kt = 0x6ED9EBA1 (20<= t <= 39)
Kt = 0x8F1BBCDC (40<= t <= 59)
Kt = 0xCA62C1D6 (60<= t <= 79).
(四)需要使用的函数
在SHA1中我们需要一系列的函数。每个函数ft (0 <= t <= 79)都操作32位字B,C,D并且产生32位字作为输出。ft(B,C,D)可以如下定义
ft(B,C,D) = (B ANDC) or ((NOT B) AND D) ( 0 <= t <= 19)
ft(B,C,D) = B XOR CXOR D (20 <= t <= 39)
ft(B,C,D) = (B ANDC) or (B AND D) or (C AND D) (40 <= t <= 59)
ft(B,C,D) = B XOR CXOR D (60 <= t <= 79).
(五)计算消息摘要
必须使用进行了补位和补长度后的消息来计算消息摘要。计算需要两个缓冲区,每个都由5个32位的字组成,还需要一个80个32位字的缓冲区。第一个5个字的缓冲区被标识为A,B,C,D,E。第二个5个字的缓冲区被标识为H0,H1, H2, H3, H4。80个字的缓冲区被标识为W0,W1,..., W79
另外还需要一个一个字的TEMP缓冲区。
为了产生消息摘要,在第4部分中定义的16个字的数据块M1,M2,..., Mn
会依次进行处理,处理每个数据块Mi 包含80个步骤。
在处理每个数据块之前,缓冲区{Hi} 被初始化为下面的值(16进制)
H0 = 0x67452301
H1 = 0xEFCDAB89
H2 = 0x98BADCFE
H3 = 0x10325476
H4 = 0xC3D2E1F0.
现在开始处理M1, M2,... , Mn。为了处理 Mi,需要进行下面的步骤
(1). 将Mi 分成 16 个字 W0, W1, ... , W15,W0 是最左边的字
(2). 对于t = 16 到 79 令 Wt = S1(Wt-3 XOR Wt-8XOR Wt- 14 XOR Wt-16).
(3). 令A = H0, B = H1, C = H2, D = H3, E = H4.
(4) 对于t = 0 到 79,执行下面的循环
TEMP = S5(A) +ft(B,C,D) + E + Wt + Kt;
E = D; D = C; C =S30(B); B = A; A = TEMP;
(5). 令H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E.
在处理完所有的 Mn, 后,消息摘要是一个160位的字符串,以下面的顺序标识
H0 H1 H2 H3 H4.
对于SHA256、SHA384、SHA512。你也可以用相似的办法来计算消息摘要。对消息进行补位的算法完全是一样的。
三、SHA算法被破解了吗?
2013年9月10日美国约翰霍普金斯大学的计算机科学教授,知名的加密算法专家,Matthew Green被NSA要求删除他的一份关于破解加密算法的与NSA有关的博客。 同时约翰霍普金斯大学服务器上的该博客镜像也被要求删除。
加密算法专家,美国约翰霍普金斯大学教授Matthew Green
但当记者向该大学求证时,该校称从未收到来自NSA的要求要删除博客或镜像的资料,但记者却无法在原网址再找到该博客。幸运的是,从谷歌的缓存可以找到该博客。该博客提到NSA每年花费2.5亿美元来为自己在解密信息方面获取优势,并列举了NSA的一系列见不得人的做法。
在BitcoinTalk上,已经掀起了一轮争论:到底SHA-2是否安全?
部分认为不安全的观点包括:
NSA制造了sha-2, 我们不相信NSA,他们不可能不留后门。
棱镜事件已经明白的告诉我们,政府会用一切可能的手段来监视与解密。
虽然有很多人会研究SHA-2,且目前没有公开的证据表明有漏洞。但没有公开这并不能代表就没有,因为发现漏洞的人一定更倾向于保留这个秘密来自己利用,而不是公布。
部分认为安全的观点包括:
SHA-2是应用广泛的算法,应该已经经历了实践的检验。
美国的对头中国和俄国都有很多杰出的数学家,如果有问题的话,他们肯定已经发现了。
如果真的不安全,世界上安全的东西就太少了,我不能生活在提心吊胆里,所以我选择相信安全。
4. lanman散列算法对用户口令信息进行处理时,密钥长度为多少字符
1、 Windows系统本地帐号信息存储
Windows NT/2000/2003/XP等系统使用sam文件作为本地用户账户数据库,所有本地帐号的登录名和口令等相关信息都保存在这个文件中。系统对保存在sam中的口令信息进行了加密处理,以保护口令信息的机密性。此外,在系统运行期间,sam文件被system账号锁定,即使是administrator账号也无法对其进行删除或拷贝等操作。 为了保证Windows操作系统的向后兼容性,Windows NT/2000/2003/XP系统采用了两种不同的机制对帐号的口令信息进行加密,所以在sam文件中每个用户口令对应着两个口令字,一个是LanMan版本的LM散列值,另一个是NT版本的NTLM散列值。
LanMan散列算法
LanMan散列算法对用户口令信息的处理过程:
第一,将所有英文字母均转换为大写字母形式;
第二,检查密钥长度是否是14个字符,如果密钥长度不足14个字符则用0补足;(注:Windows NT和Windows 2000系统密钥最长为14个字符,而Windows 2003和xp无此限制,如果密钥超过14个字符,则不会生成LM散列值,而是只生成NTLM散列值)
第三,将密钥平均分成两份,每份含7个字符,再分别对每份密钥进行加密处理;
第四,最后将加密处理后的密码组合起来。得到最终的LM散列值。
LM Hash示例:假设明文口令是"Welcome"
首先全部转换成大写,再变换成机器存储模式数据,在变换过程中如果明文口令不足14字节,则在后面添加0x00补足14字节。
"WELCOME" -> 57454C434F4D4500000000000000
(注:可以将明文口令复制到UltraEdit编辑器中使用十六进制方式查看即可获取明文口令的十六进制串)
然后将上述代码分割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000
这两组8字节数据将采用DESKEY算法对魔术字符串"KGS!@#$%"进行标准DES加密,"KGS!@#$%"对应的机器代码为:4B47532140232425
56A25288347A348A -对4B47532140232425进行标准DES加密-> C23413A8A1E7665F
0000000000000000 -对4B47532140232425进行标准DES加密-> AAD3B435B51404EE
最后将加密后的这两组数据简单拼接,就得到了最后的LM Hash
LM Hash:
5. 散列法的一些相对简单的哈希函数
1)余数法:先估计整个哈希表中的表项目数目大小。然后用这个估计值作为除数去除每个原始值,得到商和余数。用余数作为哈希值。因为这种方法产生冲突的可能性相当大,因此任何搜索算法都应该能够判断冲突是否发生并提出取代算法。
2)折叠法:这种方法是针对原始值为数字时使用,将原始值分为若干部分,然后将各部分叠加,得到的最后四个数字(或者取其他位数的数字都可以)来作为哈希值。
3)基数转换法:当原始值是数字时,可以将原始值的数制基数转为一个不同的数字。例如,可以将十进制的原始值转为十六进制的哈希值。为了使哈希值的长度相同,可以省略高位数字。
4)数据重排法:这种方法只是简单的将原始值中的数据打乱排序。比如可以将第三位到第六位的数字逆序排列,然后利用重排后的数字作为哈希值。
哈希函数并不通用,比如在数据库中用能够获得很好效果的哈希函数,用在密码学或错误校验方面就未必可行。在密码学领域有几个着名的哈希函数。这些函数包括 MD2、MD4以及MD5,利用散列法将数字签名转换成的哈希值称为信息摘要(message-digest),另外还有安全散列算法(SHA),这是一种标准算法,能够生成更大的(60bit)的信息摘要,有点儿类似于MD4算法。
6. sha1的哈希值是十六进制的数吗
是16进制的,或者说是二进制的,主流哈希算法基本都是二进制。
7. 常用的加密算法有哪些
对称密钥加密
对称密钥加密 Symmetric Key Algorithm 又称为对称加密、私钥加密、共享密钥加密:这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单的相互推算的密钥,对称加密的速度一般都很快。
分组密码
分组密码 Block Cipher 又称为“分块加密”或“块加密”,将明文分成多个等长的模块,使用确定的算法和对称密钥对每组分别加密解密。这也就意味着分组密码的一个优点在于可以实现同步加密,因为各分组间可以相对独立。
与此相对应的是流密码:利用密钥由密钥流发生器产生密钥流,对明文串进行加密。与分组密码的不同之处在于加密输出的结果不仅与单独明文相关,而是与一组明文相关。
DES、3DES
数据加密标准 DES Data Encryption Standard 是由IBM在美国国家安全局NSA授权下研制的一种使用56位密钥的分组密码算法,并于1977年被美国国家标准局NBS公布成为美国商用加密标准。但是因为DES固定的密钥长度,渐渐不再符合在开放式网络中的安全要求,已经于1998年被移出商用加密标准,被更安全的AES标准替代。
DES使用的Feistel Network网络属于对称的密码结构,对信息的加密和解密的过程极为相似或趋同,使得相应的编码量和线路传输的要求也减半。
DES是块加密算法,将消息分成64位,即16个十六进制数为一组进行加密,加密后返回相同大小的密码块,这样,从数学上来说,64位0或1组合,就有2^64种可能排列。DES密钥的长度同样为64位,但在加密算法中,每逢第8位,相应位会被用于奇偶校验而被算法丢弃,所以DES的密钥强度实为56位。
3DES Triple DES,使用不同Key重复三次DES加密,加密强度更高,当然速度也就相应的降低。
AES
高级加密标准 AES Advanced Encryption Standard 为新一代数据加密标准,速度快,安全级别高。由美国国家标准技术研究所NIST选取Rijndael于2000年成为新一代的数据加密标准。
AES的区块长度固定为128位,密钥长度可以是128位、192位或256位。AES算法基于Substitution Permutation Network代换置列网络,将明文块和密钥块作为输入,并通过交错的若干轮代换"Substitution"和置换"Permutation"操作产生密文块。
AES加密过程是在一个4*4的字节矩阵(或称为体State)上运作,初始值为一个明文区块,其中一个元素大小就是明文区块中的一个Byte,加密时,基本上各轮加密循环均包含这四个步骤:
ECC
ECC即 Elliptic Curve Cryptography 椭圆曲线密码学,是基于椭圆曲线数学建立公开密钥加密的算法。ECC的主要优势是在提供相当的安全等级情况下,密钥长度更小。
ECC的原理是根据有限域上的椭圆曲线上的点群中的离散对数问题ECDLP,而ECDLP是比因式分解问题更难的问题,是指数级的难度。而ECDLP定义为:给定素数p和椭圆曲线E,对Q=kP,在已知P,Q 的情况下求出小于p的正整数k。可以证明由k和P计算Q比较容易,而由Q和P计算k则比较困难。
数字签名
数字签名 Digital Signature 又称公钥数字签名是一种用来确保数字消息或文档真实性的数学方案。一个有效的数字签名需要给接收者充足的理由来信任消息的可靠来源,而发送者也无法否认这个签名,并且这个消息在传输过程中确保没有发生变动。
数字签名的原理在于利用公钥加密技术,签名者将消息用私钥加密,然后公布公钥,验证者就使用这个公钥将加密信息解密并对比消息。一般而言,会使用消息的散列值来作为签名对象。
8. 16进制的算法,请举例~
例如将十进制数55转化为十六进制
55÷16=3.....7
3÷16=0.....3
55的十内六进容制是37
例如将十六进制数37化为十进制数
37=3*16+7*1=55
(8)散列算法采用十六进制扩展阅读:
在历史上,中国曾经在重量单位上使用过16进制,比如,规定16两为一斤。
如今的16进制则普遍应用在计算机领域,这是因为将4个位元(Bit)化成单独的16进制数字不太困难。1字节可以表示成2个连续的16进制数字。可是,这种混合表示法容易令人混淆,因此需要一些字首、字尾或下标来显示。
9. 关于16进制算法
其实这个问题是很简单的啊,1*2^4=1×2×2×2×2=16.而1*2^3=1×2×2×2=8的啊,请问楼主是不是这样的呢???
我看楼主可能是被上面写法迷惑了的呢,给你来个清晰的写法,如下:
把一个二进制转换成十进制采用方法:把这个二进制的最后一位乘上2^0,倒数第二位乘上2^1,……,一直到最高位乘上2^n,然后将各项乘积相加的结果就它的十进制表达式。
把二进制11110转换为十进制
(11110)2=1*2^4+1*2^3+1*2^2+1*2^1+0*2^0=
=16+8+4+2+0
=(30)10
这下楼主明白了嘛!!
这是写法问题,不是说十进制的1*24等于十进制的24的,前面的那个24其实是2的4次方呢。
10. MD5、SHA1、CRC32值是干什么的
MD5可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由MD4、MD3、MD2改进而来,主要增强算法复杂度和不可逆性。MD5算法因其普遍、稳定、快速的特点,仍广泛应用于普通数据的加密保护领域 。
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
CRC32检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。
因而,在数据存储和数据通讯领域,CRC无处不在:着名的通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。
(10)散列算法采用十六进制扩展阅读:
在MD5算法中,首先需要对信息进行填充,这个数据按位(bit)补充,要求最终的位数对512求模的结果为448。也就是说数据补位后,其位数长度只差64位(bit)就是512的整数倍。即便是这个数据的位数对512求模的结果正好是448也必须进行补位。
补位的实现过程:首先在数据后补一个1 bit; 接着在后面补上一堆0 bit, 直到整个数据的位数对512求模的结果正好为448。总之,至少补1位,而最多可能补512位 。