这个算法导论怎么看怎么看 密码多少求解

字符编码发展史和密码算法那些事儿 -
| 关注黑客与极客
字符编码发展史和密码算法那些事儿
共541094人围观
,发现 12 个不明物体
从《易经》开始:
宇宙万物,道法阴阳,阴阳未分为混沌,混沌即无极,演而有序,化为太极。
易有太极,是生两仪,两仪生四象,四象演八卦,八卦演万物。
阴阳术创造了一个世界,炊烟袅袅,鸟语花香。
二进制创造了另一个世界,有一个小男孩,已经醒来。
0×01 编码的故事
一个神秘组织为了融入人类的语言符号,将二进制的单元八位一组,建立了一套符号对应关系表(例如&A =&&01000001),即&ascii&表,它是符号表的始祖。PS:标准&ascii&表的第一位都是&0,因此只有128&个字符。
一句话总结:所有编码的爸爸。
gb2312/gbk/gb18030
聪明的天朝人民也想融入自己的文字。由于标准&ascii&字符首位为&0,他们用两个首位为&1&的字节(我=&&1100111011010010)组合来表示汉字。为了庆祝这种机智的做法,命名为&gb2312;加入繁体字后,发现还是不够用。让后面一个字节的首位也可以为&0&,这样又可以多编码一倍的汉字,这种方案叫&gbk;再后来,加入少数民族文字,就有了&gb18030。
天朝另一个小区域一直在用繁体字,他们发明了&Big5&汉字编码。
一句话总结:中国特色的编码。
“你们不可能每个人都这么乱搞一套编码吧?你们互不相懂,唧唧歪歪,互相伤害,还能好好做朋友吗?”另一个神秘组织终于忍不住了,“你们不是嫌&ascii&编码不了你们的文字么?那简单,我用&2个字节,把全世界所有的符号都统一编码起来。”这样就出现了&Unicode。最初用&2&个字节想表示所有字符的方案,叫做&UCS-2,这样最多能表示&65536个字符。突然有一天,这位小哥发现&2&个字节根本不可能编码世界上所有的字符,就有了后面的&UCS-4,用&4&个字节来统一编码总够了吧……
一句话总结:别闹了都听哥的。
utf-7/8/16/32
这样编码是好,然而传输呢?按照&UCS-2&方案,所有字符都需要两个字节来传输,例如要发送一个A,就要发送&0001&这么多位,很浪费有木有?而且在实际传输中,数字和字母这样的字符占绝大多数。机智的人们又想搞事情了,引用哈弗曼编码的思想,出现频率越高的字符用更短的编码传输,频率低的字符就用多一点的编码传输。
utf-8,即每次传输&8&位一组。
所以发送&A,传输时一组就够了,实际传输&。
而发送“汉”,则需要三组才行,&实际传输&111001101011000110001001。其中蓝色&8&位是&Unicode编码的第一个字节,绿色&8&位是第二个字节。
utf-7,utf-16,utf-32&也是一样的道理。utf-7&期初是用于电子邮件,邮件以字母为主,ascii&实质也是7&位一组。后面&16&和&32&这两种分组没有流行起来。
PS:utf-8&传输简体汉字时,是按照&3&个字节传输的,这就有了&utf-8&是&3&个字节这样的说法。实际上在&UCS-2&下&utf-8&传输字符,用&1-3&都是有可能的哦^_^
另外经常写和字符有关程序的小伙伴,一定有这样一个经验,想要让&gbk&和&utf-8互转,都是先要转到&Unicode&哦。
一句话总结:按频率传输,节省流量。
0×02 更少的编码
前面这一小段故事讲完了,我们先休息一下,马上进入更有意思的话题。
话说天下大势,分久必合,合久必分。字符的编码由简入繁,势必也会化繁为简。那么如何用更少的字符去表示所有编码呢?
Quoted-printable&编码
ascii&有&127&个字符,而且很多符号甚至是不可打印的,那怎么才能让他们都能显示呢?这个简单,对于不可打印字符,就用“=XX”表示,其中&XX&是该字符的&ascii&编码。例如换页符(ascii&为&0C),就可以表示成&=0C。只需要&=和0-F&这17个字符哦^_^
一句话总结:即使不可打印,也要可见。
Base64/32/16&编解码
Base&家族原理类似,就是用少量字符表示更多字符,但是也不像二进制那么少。Base64&即用64 个字符来表示所有ascii,怎么做到的呢?
大写字母集 W = {A,B,C…Z} 共 26 个
小写字母集 w = {a,b,c…z} 共 26 个
数字集 d = {0,1,2…9} 共 10 个
符号集 s = {+,/}
这&64&个字符对应数字&0-63,转化成二进制则是&6&位。而&ascii&是用&8&位,6&和&8&的最小公倍数是&24 = 3 * 8 = 4 * 6,所以将3&个ascii&字符就能转化成4&个base64&字符。
ascii&的&ABC-&&&-&010000
010100001001000011&-&QUJD
同理 base32 是用 32 个字符即 5 位表示,5 * 8 = 8 * 5,所以 base32 会把 5 个 ascii 字符变成 8 字符哦。
PS:如果字符数不是3 的倍数,怎么办?看一下操作你就知道了。
0000-& QQ==&所以你会看到 base64 串后面有1或2个=。
另外有些不专业的销售,会说他们的产品是用 base64 加密的,客户就会立刻质疑他的产品!base64只是一种编码,它的实质还是明文,你说用它来加密,不是掩耳盗铃??
另外依照这种理论,那么我们的二进制是不是可以理解成 base2?ascii 就是 base128 嘛。
一句话总结:用我们常用的字符表示所有字符。
XX&编码,UU&编码
它们实质跟&base64&是一样的,也是用&64&个字符来表示,只是选取的字符和编排方式不同罢了,其实它们才是base64&的前身,慢慢演进,渐渐被base64&取代了。
一句话总结:长江后浪推前浪。
URL,HTML&编码
采用“%+ascii”的方式对字符进行编码,比如:
&-& %2e%2e%2f%2e%2e%2fpasswd
采用“&#+十进制数字”或“&#x+十六进制数字”的方式对字符进行编码,比如:
&p&ab&/p& -& &p&ac&/p&
一句话总结:新瓶装旧酒。
说了这么多,下面画个编码家族的家谱图:
0×03 古典密码
从这些编解码演化的过程中,相信各位看官也会感受到劳动人民的智慧。前面的只是热身,下面将进入今天的重头戏,密码学。
还是回到开头那句话,任何一种思想或者想法,都一定是为了解决实际问题而设计的。字符编码的故事,是为了解决字符的表示、显示和传输的问题。那么密码学是为了啥子呢?
相信&Bob,Alice&和 &Ted&
斗智斗勇的故事大家都看过,没有看过的可以百度一下,挺有意思的。数据传输的安全性包括以下三个性质:
机密性:数据被偷了,小偷不知道是啥。
完整性:数据被改了,接受方能够发现。
可用性:纯属废话,不能用还要你何用?
下面主要介绍密码学在前两条性质中的作用。
先来几个不算是密码的密码算法。为啥这样说呢,因为这些算法刚发明时,别人不知道是怎么计算的,因此无法根据“密文”还原出原来的信息,可以算作加密。后来被普及了,大家就都会算了,这时候你还说你加密了,你是不是当我傻?
引用一句话&I came,I saw, I conquered.&多么霸气啊。这个以帝国霸主名字命名的密码学确实如此朴素。凯撒密码有两种模式:
(1)位移密码,就是讲明文每位都移动特定位数,例如&AbC&右移&4&位就变成&Efg.
那么我(I)想对你说:M pszi csy.
(2)查表密码,指定一张明文和密文对应的关系表,然后对着这个表进行加解密。例如:
Hello加密之后就变成&Axeeh,那么Ixkyxvm.
维吉尼亚密码
我理解它是一种升级版的凯撒密码,它引入一张&26*26&的密码表盘,可以设定一个密钥,然后按照查表的方式进行加解密。由于操作简单,不过多叙述。
ROT5/13/18/47
ROT13&就是右移&13&位的凯撒密码,后面的数字是移动位数,这种加密方法不限定在数字或字母上,也可以拓展到所有&ascii。
摩尔斯密码
.. … – .. .-.. .-.. .-.. — …- . -.—– ..-
这种密码感觉还是很有意思的,就是看汉字露出的笔画数,决定这个数字是几,例如“十”,上下左右四处漏出,所有他就是数字&4&。
告诉你一句表白:大中口由人甲工
猪圈密码,栅栏密码等,其原理差不多,就是通过一张事先约定好的密码表,然后将明文进行查表加解密。
PS&:这些密码算法实现简单,只是对原始字符做了一种替换编码,想到即解决。因此这些算法深受考脑洞的&CTF&赛友的青睐,也只适合出现在比赛和游戏中。
&0×04 现代密码算法
好了终于把这一段朴素的古典密码啰嗦完了,下面这一段介绍现代密码学。还是从机密性和完整性这两条性质展开,来介绍一下密码学算法是如何解决这些问题的。
先来说说机密性,密码学的机密性算法,都是含有密钥的。理论上来讲,一份数据在网络上传播,被谁获取都是有可能的,如果它的主人只希望“对的人”才能理解它,所以必须有密钥机制才能保障。
含有密钥的加密算法有两类,对称加密和非对称加密。
对称加密算法
加解密的双方使用同一个密钥,一般是加解密双方以一种不可告人的方式偷偷约定好一个密钥。所有需要传递的消息都用这个密钥加密成暗号,接收方用这个密钥解密得到原始消息。
目前的对称加密有“流加密”和“分组加密”。
流密码算法:将明文按字符逐位(逐比特)地、对应地进行加密的一类对称密码算法。
分组密码算法:将明文分成固定长度的分组,如64bit&或&128bit&一组,用同一密钥和算法对每一个分组加密,输出也是固定长度的密文。
流加密算法相对简单,你可以把明文串和密钥串看成两条长长的水管,遇到对齐的位就做一个约定好的运算。目前有代表性的算法有RC4和&GSM。
举个栗子,一个异或的流加密过程如下:
&知道了加密过程,解密也自然思路清晰:
由于流加密原理简单,其算法结构存在着弱点,另外密钥流有一般会多次重用,泄露局部的明文就可能让攻击者嗅探出密钥。另外,由于流加密是按位进行加密的,攻击者如果只是修改了密文中几个bit,不会破坏原消息的结构,这样接受者就会接受错误的信息。
PS :目前所有的流机密算法,都被认为是不安全的,重要消息不要用流加密哦^_^
分组加密算法内部实现复杂,每一块加密,都有几十轮运算,这里我不打算过多地介绍其实现过程。其代表算法有DES&和&AES。
目前&DES&已经被证明是不安全的,但是&3&重&DES&当三次的密钥都不相等时,是安全的。AES&密钥长度在&128&以上的算法,目前都是安全的。
分组模式其实还有很多,我主要介绍一下&ECB&和&CBC&模式。
ECB&模式:每组是独立和密钥进行运算的:
CBC&模式:每组先和上一组密文运算后,再跟密钥运算:
我们拍拍脑袋想想就知道CBC&模式更加安全,因此强烈建议使用&CBC&模式,下面再来张图,看看两种模式加密之后的效果:
一句话总结:对称加密就是用同一把密钥进行加解密。&
非对称加密算法
座山雕:天王盖地虎!
杨子荣:宝塔镇河妖!
众金刚:么哈?么哈?
杨子荣:正晌午时说话,谁也没有家!
座山雕:脸红什么?
杨子荣:精神焕发!
座山雕:怎么又黄啦?
众匪持刀枪逼近杨子荣。
杨子荣(镇静地):哈哈哈哈!防冷涂的蜡!
这个故事就用到了多组非对称密钥,环环相扣,一组密钥错误,就会丢了小命。
非对称加密相比对称加密就都要复杂的多,虽然对称加密背后也有一套数学理论,但是非对称加密背后的数学理论就更加深厚。小编不才,只能请了一个密码学专业的童鞋用一句描述了两个算法背后的数学难题:
RSA:大数分解问题。
ECC:椭圆曲线上的离散对数问题。
言多必失,为了不误导大家,我就不分析具体算法了。我只讲讲这两个算法的效果。
经过一系列复杂运算后,非对称密码算法会产生一对密钥:
公钥:一般较短,可以公开。
私钥:一般较长,作者保留。
这两个密钥有如下性质:
(1)&&&&&&&公钥和私钥都能进行加密和解密。
(2)&&&&&&&用公钥加密后的内容,只有用对应的私钥才能解开。
(3)&&&&&&&用私钥加密后的内容,也只有用对应的公钥才能解开。
(4)&&&&&&&以上三条其实都是废话。
除了用在加解密用来保证数据的机密性,那么这种非对称密码算法,还有什么作用呢?
签名:用私钥加密一条消息发出去,证明是我。
数字证书(CA):将签名和公钥一起打包发出去,任何人都可以通过公钥解密签名的方式来证明是我。
PS :一般非对称加密算法速度慢,对于大文件或长消息的加密都用对称加密。
一句话总结:非对称加密有两把不同的钥匙哦。
以上加密算法,主要是保证消息的机密性,那如果消息被修改了,该怎么办呢?
下面再介绍几个算法,使得消息一旦被篡改,接受者就能察觉到。
这时你可能会想到几个名词:
消息摘要,数字指纹,单向散列
额,他们的实质都是一样的,他们用到的技术,都是密码学中的&Hash&算法。Hash&算法有以下几个美好的特性:
(1)&&&&&&&固定长:不管你输入多长,输出都是固定的,而且很短。
(2)&&&&&&&唯一性:对于不同的输入,基本可以认为输出是不同的。
(3)&&&&&&&不可逆:正向运算可行,反向运算不可能!
上面这些名词只是对&Hash算法某个特性的偏重。消息摘要,就是利用固定长的性质;数字指纹用到的是唯一性,单向散列则用到不可逆性。不管一个人长得啥样,都可以用一个小小的指纹来代表他,消息的摘要也是一样,这就是&Hash&算法的魅力。目前用的最多的hash&算法是&MD5,SHA-1&和&SHA-2。
尽管&MD5&和&SHA-1&已经被碰撞了,证明是不安全的,但是这几年他们还不会消失;SHA-2&其实不是某一种算法,它是一个大家族,
SHA224/256/384/512&全部属于&SHA-2。当你下载软件时,是不是经常会看到以下信息?它们就是该软件的指纹。
MD5&指纹:
SHA-1&指纹:
SHA-2&指纹:
Hash&算法里的“唯一性”并不是真正唯一的,找到两条不同的消息,使得他们有相同的指纹,叫做碰撞。Hash&算法之所以管用,是因为它们碰撞的概率极低的。现在的科技也说明人类的指纹也存在碰撞,所以要引入虹膜。其实虹膜也存在碰撞,只是它碰撞的概率比指纹要更低。
Hash&算法里的“不可逆”是真正的不可逆。从算法本身的数学原理来讲,通过&Hash&值来直接倒推原始输入,是不可能的。要分清两个概念,碰撞和可逆是不一样的哦。既然不可逆,那么我们有没有方法来复原明文呢?
方法有是有,不过这是概率性的,就跟之前一些公司宣传“概率性”恢复被加密的文件是一个概念,下面我介绍完,大家自然就明白“概率性”是啥意思了。
第一种方案是爆破,通过循环来构造不同字符的组合,然后正向计算&Hash&值,如果发现跟目标值一样,就认为找到了。这种方法对于那些简单且很短字符串&Hash&值的爆破是非常有效的,因此设置密码要长一点,且多弄几种奇奇怪怪的字符哦。
另一种方案就是彩虹表,它的实质跟第一种方案是一样的。它会实现计算好很多“常规”字符串的Hash&值,然后建立一张很大的表把它们存起来,这种表就叫做“彩虹表”,对于要破解的目标值,只需要查一下表就可以了。它的特点是速度快,有则有,无则无,不啰嗦,不挣扎。
那么怎么应对这些蛮不讲理的破解呢?还是有两种方法,我只说说它们是怎么做的,相信大家就知道防爆破的原理了。
加盐:计算&Hash&值时,加入一个随机数,叫做盐值。
PBKDF2:迭代多来几轮&Hash
,味道不好也可以加点盐。
当然为了防止被消息被篡改,还有一部分较弱的校验算法,它们一般把校验码直接放到消息中,它们的保护能力很弱,攻击者只需要跟着把校验位修改,即可绕过。
Luhn&校验算法
我们知道,公民的身份证是18&位,而最后一位就是校验位。喜欢玩游戏的小伙伴一定都有这样的经历,游戏需要实名认证,而有时候也不想泄露自己的身份证信息。有时候就会随便输入一个身份证,系统就能马上判断出你的身份证是无效的。怎么做到的呢?
把前&17&位分别乘上以下系数,然后相加:
然后把相加的结果模除&11,得到的余数只可能是0-10。余数再按照下表做一次变换,就可以得到最后一位:
当余数是2时,经过上面变换后就是X,这也说明了为什么有些人的身份证最后一位是&X。如果当时是模除&10,是不是就能避免出现&X&这样的数字了呢^_^
像一些银行卡、社保卡等也都是用的&Luhn算法,只是系数表不一样而已。
CRC&校验(BCC,LRC)
当然身份证校验码相对简单,系数也都是固定的。CRC&校验码原理其实也相似,只是去乘以一个多项式而已,在此就不过多叙述。
一句话总结:你可以改,但我也可以拒收。
MAC&算法(带密钥的摘要算法)
看到这里,消息的机密性和完整性,也算是差不多说完了。聪明的小伙伴可能会有这样的想法:如果攻击者在修改了密文消息的同时,把后面的消息摘要也相应修改了。那么接受方是不是还是无法判断?
没错,想法很好,实际这种做法之前就发生了,为了解决这个问题,就又要引入下一个更加牛逼的完整性算法。有问题就总有对策,技术就是在解决问题的基础上发展的。
回忆一下我们怎么保证机密性的?就是通过密钥嘛。那么我在做消息摘要时,也带上一个密钥,这样攻击者就没办法修改消息摘要了嘛。基于这种思想实现的算法,就是MAC&算法。当然,如果其中的摘要算法是用&Hash&函数实现的,那么就叫&HMAC&啦。&HMAC&算法一般是采用对称密钥,事先约定好。至于摘要那种算法倒是可选的,所有就有了&HMAC-MD5,HMAC-SHA1&等等。
一句话总结:密钥&+&指纹,更安全。
DH,ECDH(密钥协商算法)
最后一个问题了,说到消息传输,可以用密钥来加密,那么问题来了,密钥怎么传输呢?你可能会想到用另一个密钥加密,那么另一个密钥怎么传输呢?如果是周围的朋友,你可以直接去他家里,然后告诉他。既然你都可以去他家里了,消息你也可以直接告诉他,干嘛还要通过网络呢,呵呵。
所以最后一个算法是关于密钥协商的,这跟密钥传输还不是一个概念。
以前看了一篇小说,里面有个情节:在一个小玻璃瓶里,有一根比瓶口粗得多的树干,大家都不明白这根树干是怎么放进去的。小伙伴也可以想想哦。
其实在刚开始的时候,在玻璃瓶里种了一棵树种子,里面有水有土壤,种子就一直在玻璃瓶里生长。当它长出树枝时,小主人就把剪刀伸入瓶口剪掉树枝,移出瓶外。就这样当树干长到一定粗度,小主人就倒出水和土壤,让树木干死。就形成了如今这个局。这是一篇不错的推理小说,这个谜的原理就跟我们今天的主角&DH&算法有点类似。DH&算法并非事先产生一个密钥,而是在双方的对话中,根据对方的信息,来生成密钥。密钥期初是一棵种子,在双方的交互中不断生长。即使攻击者收集了双方所有的对话内容,也无法知道密钥是啥。
通过两个人说一堆奇奇怪怪的话,然后密钥就在这些奇怪的暗语中产生了,怎么做到的呢?
一次密钥协商,涉及到&2&个人和&7& 个数据。
人物:男主角1,女主角2
公开数据:质数a,质数p,y1,y2
私密数据:x1,x2
质数&a,p&是公开的,可以随便确定,p&需要是大质数。
然后男1和女2&各想一个幸运数字&x1和x2。
男1计算&y1 = a^x1 mod p,并把&y1&告诉女2;
女2计算&y2 = a^x2 mod p,并把&y2&告诉男1;
男1计算&Key = y2^x1 mod p
女2计算&Key = y1^x2 mod p
下面简单证明一下男1计算得到&Key1&和女2计算得到的&Key2&是相等的。
Key1 =y2^x1 mod p = (a^x2)^x1 mod p =&a^(x2*x1)mod p
Key2 =&y1^x2mod p = (a^x1)^x2 mod p =&a^(x1*x2)&mod p:
这个算法的神奇之处在于,即使对方也无法知道自己手里的幸运数字,但能计算出共同的密钥。它的数学原理是基于离散对数问题和求模公式,也涉及到一些质数的性质。
ECDH&算法就是将&ECC&算法和&DH&算法一起使用协商密钥。
一句话总结:谈笑间,密钥应运而生。
加密的最佳实践—信封加密:
将对称密钥加密后放到消息中,一起发生。是不是与&WannaCry&勒索病毒加密方式类似?
0×05 结语
终于可以长吁一口气了,辛苦各位看官了。下面总结一下都讲了啥:
(1)编码的故事讲了字符编码的发展史
ASCII捏造了常规字符;
gb系列融入了汉字;
Unicode统一编码;
UTF进行省流量传输;
XXUU,Base定义更少字符编码
(2)密码学系列介绍了密码算法的作用:
古典密码算法思路简单,以查表加解密为主,安全性弱。
现代密码学旨在保证数据的机密性和完整性。
机密性算法涉及到密钥,对称首选AES,非对称有RSA和&ECC。
完整性算法优选是哈希,定长唯一不可逆,MD5,SHA-1不安全,SHA-2家族杠杠的。
校验算法计算简单,校验位存留在信息自身,Luhn和&CRC应用广泛。
为防止数字指纹被修改,引入带密钥的哈希算法HMAC,带密码的指纹更安全。
高冷的简短的对话,密钥应运而生,密钥协商我只认DH。
文中若有不足之处,请大家斧正。如果想和作者交流,请关注我们的微信公众号WeiRanLabs或通过电子邮件与我们联系,邮箱地址weiran.。
*本文作者:华为未然实验室,转载请注明来自
小菜倒是觉得文章很好,浅显易懂。
可能是我的错觉,这样的小白科普文,在freebuf,没有100篇,也得有几十篇了。
必须您当前尚未登录。
必须(保密)
未然实验室是华为网络产品线下属专业安全团队,实验室聚焦主流攻防技术研究和安全知识的普及,秉承“安全需防患于未然”的安全理念,致力于网络空间的安全治理,希望通过我们的努力,为用户提供一流的安全产品和服务。
关注我们 分享每日精选文章MD5算法如何解密_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
MD5算法如何解密
介绍MD5加密算法基本情况MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。 Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了&字节串&而不是&字符串&这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。 MD5将任意长度的&字节串&变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。 MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被&篡改&。举个例子,你将一段话写在一个叫readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的&抵赖&,这就是所谓的数字签名应用。 MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不&知道&用户的密码是什么。 一些黑客破获这种密码的方法是一种被称为&跑字典&的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。 即使假设密码的最大长度为8,同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2)....+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘组,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。 在很多电子商务和社区应用中,管理用户的Account是一种最常用的基本功能,尽管很多Application Server提供了这些基本组件,但很多应用开发者为了管理的更大的灵活性还是喜欢采用关系数据库来管理用户,懒惰的做法是用户的密码往往使用明文或简单的变换后直接保存在数据库中,因此这些用户的密码对软件开发者或系统管理员来说可以说毫无保密可言,本文的目的是介绍MD5的Java Bean的实现,同时给出用MD5来处理用户的Account密码的例子,这种方法使得管理员和程序设计者都无法看到用户的密码,尽管他们可以初始化它们。但重要的一点是对于用户密码设置习惯的保护
可以去下载:Md5Cracker v4等软件来穷举破解(速度慢) 或用RainbowCrack等软件的彩虹表来破解(不过彩虹表的文件可是非常大的哦几百GB呢) 在网线的网站就是利用彩虹表来破解的
为您推荐:
其他类似问题
md5的相关知识
等待您来回答密码算法_百度百科
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
密码算法是用于加密和解密的数学函数,密码算法是密码协议的基础。现行的密码算法主要包括、、公钥密码、散列函数等,用于保证信息的安全,提供鉴别、完整性、抗抵赖等服务。假设我们想通过网络发送消息P(P通常是明文数据包),使用密码算法隐藏P的内容可将P转化成密文,这个转化过程就叫做加密。与明文P相对应的密文C的得到依靠一个附加的参数K,称为。密文C的接收方为恢复明文,需要另一个K-1完成反方向的运算。这个反向的过程称为解密。
密码算法加密技术
一个密码系统的安全性只在于的保密性,而不在算法的保密性。 对纯数据的加密的确是这样。对于你不愿意让他看到这些数据(数据的明文)的人,用可靠的,只要破解者不知道被加密数据的密码,他就不可解读这些数据。 但是,软件的加密不同于数据的加密,它只能是“隐藏”。不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软件的明文),软件最终总要在机器上运行,对机器,它就必须是明文。既然机器可以“看见”这些明文,那么 Cracker,通过一些技术,也可以看到这些明文。 于是,从理论上,任何技术都可以破解。只是破解的难度不同而已。有的要让最高明的 Cracker 忙上几个月,有的可能不费吹灰之力,就被破解了。
密码算法密码学
密码算法相关概念
(1) 发送者和接收者
假设发送者想发送消息给接收者,且想安全地发送信息:她想确信偷听者不能阅读发送的消息。
(2) 消息和加密
消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密,加了密的消息称为密文,而把密文转变为明文的过程称为解密。
明文用M(消息)或P(明文)表示,它可能是比特流(文本文件、、数字化的语音流或数字化的视频图像)。至于涉及到计算机,P是简单的二进制数据。明文可被传送或存储,无论在哪种情况,M指待加密的消息。
密文用C表示,它也是二进制数据,有时和M一样大,有时稍大(通过压缩和加密的结合,C有可能比P小些。然而,单单加密通常达不到这一点)。加密函数E作用于M得到密文C,用数学表示为:
相反地,解密函数D作用于C产生M
先加密后再解密消息,原始的明文将恢复出来,下面的等式必须成立:
D(E(M))=M
(3) 鉴别、完整性和抗抵赖
除了提供机密性外,密码学通常有其它的作用:.
消息的接收者应该能够确认消息的来源;入侵者不可能伪装成他人。
(b) 完整性检验
消息的接收者应该能够验证在传送过程中消息没有被修改;入侵者不可能用假消息代替合法消息。
(c) 抗抵赖
发送者事后不可能虚假地否认他发送的消息。
(4) 算法和
密码算法也叫密码,是用于加密和解密的数学函数。(通常情况下,有两个相关的函数:一个用作加密,另一个用作解密)
如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。受限制的算法具有历史意义,但按现在的标准,它们的保密性已远远不够。大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法。如果有人无意暴露了这个秘密,所有人都必须改变他们的算法。
但是,受限制的密码算法不可能进行质量控制或标准化。每个用户组织必须有他们自己的唯一算法。这样的组织不可能采用流行的硬件或软件产品。但窃听者却可以买到这些流行产品并学习算法,于是用户不得不自己编写算法并予以实现,如果这个组织中没有好的密码学家,那么他们就无法知道他们是否拥有安全的算法。
尽管有这些主要缺陷,受限制的算法对低密级的应用来说还是很流行的,用户或者没有认识到或者不在乎他们系统中内在的问题。
现代密码学用解决了这个问题,密钥用K表示。K可以是很多数值里的任意值。K的可能值的范围叫做密钥空间。加密和解密运算都使用这个(即运算都依赖于密钥,并用K作为下标表示),这样,加/解密函数现在变成:
这些函数具有下面的特性:
DK(EK(M))=M.
有些算法使用不同的加密和解密密钥,也就是说加密密钥K1与相应的解密密钥K2不同,在这种情况下:
DK2 (EK1(M))=M
所有这些算法的安全性都基于的安全性;而不是基于算法的细节的安全性。这就意味着算法可以公开,也可以被分析,可以大量生产使用算法的产品,即使偷听者知道你的算法也没有关系;如果他不知道你使用的具体,他就不可能阅读你的消息。
密码系统由算法、以及所有可能的明文、密文和组成的。
基于的算法通常有两类:和算法。下面将分别介绍:
密码算法对称密码算法
有时又叫传统密码算法,就是加密能够从解密密钥中推算出来,反过来也成立。在大多数中,加/解密是相同的。这些算法也叫秘密算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。的安全性依赖于,泄漏密钥就意味着任何人都能对消息进行加/解密。只要通信需要保密,就必须保密。
的加密和解密表示为:
可分为两类。一次只对明文中的单个比特(有时对)运算的算法称为序列算法或。另一类算法是对明文的一组比特亚行运算,这些比特组称为分组,相应的算法称为分组算法或。现代计算机密码算法的典型分组长度为64比特——这个长度大到足以防止分析破译,但又小到足以方便使用(在计算机出现前,算法普遍地每次只对明文的一个运算,可认为是对字符序列的运算)。
密码算法公开密码算法
算法(也叫)是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内)。之所以叫做算法,是因为加密密钥能够公开,即陌生者能用加密密钥加密信息,但只有用相应的解密密钥才能解密信息。在这些系统中,加密叫做(简称),解密密钥叫做私人密钥(简称)。私人有时也叫秘密密钥。为了避免与混淆,此处不用秘密这个名字。
用公开密钥K加密表示为
虽然和私人密钥是不同的,但用相应的私人密钥解密可表示为:
有时消息用私人密钥加密而用解密,这用于数字签名(后面将详细介绍),尽管可能产生混淆,但这些运算可分别表示为:
当前的公开密码算法的速度,比起对称密码算法,要慢的多,这使得公开密码算法在量的加密中应用有限。
密码算法单向散列函数
单向散列函数 H(M) 作用于一个任意长度的消息 M,它返回一个固定长度的散列值 h,其中 h 的长度为 m 。
输入为任意长度且输出为固定长度的函数有很多种,但还有使其单向的其它特性:
(1) 给定 M ,很容易计算 h ;
(2) 给定 h ,根据 H(M) = h 计算 M 很难 ;
(3) 给定 M ,要找到另一个消息 M‘ 并满足 H(M) = H(M’) 很难。
在许多应用中,仅有单向性是不够的,还需要称之为“抗碰撞”的条件:
要找出两个随机的消息 M 和 M‘,使 H(M) = H(M’) 满足很难。
由于散列函数的这些特性,由于公开密码算法的计算速度往往很慢,所以,在一些密码协议中,它可以作为一个消息 M 的摘要,代替原始消息 M,让发送者为 H(M) 签名而不是对 M 签名 。
如 SHA 散列算法用于数字签名协议 DSA中。
密码算法数字签名
提到数字签名就离不开公开密码系统和散列技术。
有几种能用作数字签名。在一些算法中,例如RSA,或者都可用作加密。用你的加密文件,你就拥有安全的数字签名。在其它情况下,如DSA,算法便区分开来了??数字签名算法不能用于加密。这种思想首先由Diffie和Hellman提出 。
基本协议是简单的 :
(1) A 用她的对,从而对。
(2) A 将签名的文件传给B。
(3) B用A的解密文件,从而验证签名。
这个协议中,只需要证明A的的确是她的。如果B不能完成第(3)步,那么他知道签名是无效的。
这个协议也满足以下特征:
(1) 签名是可信的。当B用A的验证信息时,他知道是由A签名的。
(2) 签名是不可伪造的。只有A知道她的。
(3) 签名是不可重用的。签名是文件的函数,并且不可能转换成另外的文件。
(4) 被签名的文件是不可改变的。如果文件有任何改变,文件就不可能用A的验证。
(5) 签名是不可抵赖的。B不用A的帮助就能验证A的签名。
密码算法加密算法
加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密)。的要点是加密算法,加密算法可以分为、不对称加密和不可逆加密三类算法。
对称加密算法是应用较早的加密算法,技术成熟。在中,数据发信方将明文()和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在中,使用的只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,成为用户的负担。在分布式网络系统上使用较为困难,主要是因为困难,使用成本较高。在计算机专网系统中广泛使用的有DES和IDEA等。美国国家标准局倡导的AES即将作为新标准取代DES。
不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—和。在使用加密文件时,只有使用匹配的一对和,才能完成对明文的加密和解密过程。加密明文时采用加密,解密密文时使用才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的才能解密密文。显然,采用,收发信双方在通信之前,收信方必须将自己早已随机生成的送给发信方,而自己保留。由于不对称算法拥有两个,因而特别适用于中的。广泛应用的有RSA算法和美国国家标准局提出的DSA。以为基础的加密技术应用非常广泛。
的特征是加密过程中不需要使用,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。显然,在这类加密过程中,加密是自己,解密还得是自己,而所谓解密,实际上就是重新加一次密,所应用的“密码”也就是输入的明文。不可逆加密算法不存在保管和分发问题,非常适合在分布式网络系统上使用,但因加密计算复杂,工作量相当繁重,通常只在数据量有限的情形下使用,如广泛应用在中的口令加密,利用的就是不可逆加密算法。近年来,随着计算机系统性能的不断提高,不可逆加密的应用领域正在逐渐增大。在计算机网络中应用较多的有RSA公司发明的MD5算法和由美国国家标准局建议的不可逆加密标准SHS(Secure Hash Standard:安全杂乱信息标准)等。
本词条内容贡献者为
副理事长兼秘书长
中国通信学会
中国通信学会
原武汉邮电科学研究院
中国联通网络技术研究院
工业和信息化部电信研究院互联网中心
副院长兼总工程师
中国移动设计院
首席架构师业务总工程师
中兴通讯股份有限公司
百度公司发展研究中心
中国通信学会科普中国百科科学词条评审专家委员会
中国通信学会是全国通信...
提供资源类型:内容}

我要回帖

更多关于 怎么看算法迭代收敛图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信