阅读:2995回复:6
科普第7篇——加密解密
今天看到大帝公告区的那个帖子,促使我写了这个早就要写的东西。
服务器里是不保存各位的密码的,自己的密码只有自己知道。那么论坛程序怎么验证密码是否正确呢?往下看你就知道了。 数据的安全,是人们一直很关心的问题,但是纷繁复杂的环境难保数据不被截获,加密技术的诞生就是为了保证数据被截获之后也无法被利用,提高数据的安全性。 加密(encrypt、encryption)的逆过程就是解密(decrypt、decryption)。加密前的数据称为“明文”,加密后的数据称为“密文”。 加密算法可以分为对称加密算法、非对称加密算法,以及Hash算法。 对称加密,就是使用同一个密匙来加密和解密数据。 非对称加密,就是使用一个可以公开的密匙(公匙)来加密数据,使用一个私密的密匙(私匙)来解密数据。任何人都可以利用公匙加密数据,只有拥有私匙的人才能解密数据。 Hash算法,是利用Hash函数生成的数据的Hash值,可以通过Hash值来比对数据。Hash值并不能通过解密还原为原数据,但可以通过比对Hash值来确定数据的正确性。 比如各位现在访问论坛的密码,并不是直接存储在论坛数据库中的,这样也十分地不安全。实际上数据库中存储的是密码的Hash值,在登录时,将你输入的密码计算Hash值,并和数据库中储存的Hash值比对,如果一致则密码输入正确,如果不同则输入错误。 对称加密使用同一个函数来加密和解密数据。也就是说,对明文用相同的密匙加密两次得到的还是明文。在数学上来说,加密函数的反函数是它自身。 常见的对称加密有DES(数据加密标准,Data Encryption Standard)、AES(高级加密标准,Advanced Encryption Standard)。这两种都是美国国家标准局确定的联邦资料处理标准(FIPS)。 DES使用56位(实际上是64位,但8位用于奇偶校验,实际有效的只有56位。这里的“位”是二进制位,也就是“比特”(bit)。记得吗?8比特=1字节。详见“科普第3篇”)密匙对数据块进行加密(DES属于块密码,也就是说加密前后的数据长度是一样的)。由于密匙较短,而且算法被怀疑有美国国家安全局(NSA)的后门,所以受到了一些质疑。为了改善安全性,还有对一个数据块进行3次DES加密的方法,称为3DES。 AES也是属于块密码,AES用128、192或者256位密匙加密,但数据块长度均为固定的128位。如果配置过无线路由器加密的对这个算法一定不陌生,WPA2中的加密方式之一就是AES(另一种是TKIP)。实际上,AES是目前使用较为广泛的一种加密,很多地方都是用AES加密(比如我们使用的银行卡/信用卡)。 不管什么对称加密,都可以使用暴力破解来破解密匙。所谓暴力破解就是尝试所有的密匙(如64位的DES密匙范围就是十进制的0到264-1)。当然,针对加密算法的弱点也可以设计一些比暴力破解更简单的破解方法。只要一种加密可以通过比暴力破解简单的算法来破解,我们就说这种加密被“破解”了(注意是这种加密方法被破解,不是密匙被破解)。 非对称加密由于使用不同的密匙来加密和解密数据,所以比对称加密更安全(某些意义上来说)。 目前最常见到的,最广泛一种非对称加密就是RSA。 RSA,是发明者Ronald L. Rivest、Adi Shamir和Leonard M. Adleman的姓氏首字母。下面我们就来说说RSA是如何工作的。 首先,选取两个质数p和q,并计算z=pq。为了保证安全性,p和q一般都选取比较大的数。但为了说明方便,我们这里选择较小的数p=13和q=17,z=221。 接着,计算Φ=(p-1)(q-1)。我们的例子里Φ=176。 然后,找一个整数n使得n和Φ互质(也就是gcd(n,Φ)=1,gcd是取最大公约数)。通常选择n为质数。这里我们选择n=29。 z和n就是可以公开的公匙。 接下来,还要计算一个数s,使得0<s<Φ,并满足ns mod Φ=1(mod是取余运算,a mod b也就是计算a除以b的余数)。由于不是我们的重点,所以计算方法不详细介绍。这里我们算得s=85。 s就是私匙。 要对数据a加密(a满足0≤a≤z-1),计算c=an mod z。c就是加密后的数据。 解密时,计算cs mod z,结果就是a。 例如我们要加密a=25,那么c=2529 mod 221=77。 解密时,计算7785 mod 221=25,这就是a。 大家可以自行用Windows自带的计算器(要切换到科学型,内建有mod运算)验证一下,取较小的数字是为了方便大家验证,取的数大了很容易超过计算器的计算能力,从而出错。 RSA加密的安全性是基于目前没有有效的方法(不是没有方法)来分解大数质因数,实际上只要将z分解质因数,就能知道p和q。 另一种破解方法是计算c mod z的n次方根,很遗憾的是,目前也没有计算开方的有效方法。 所以在目前的情况下,RSA还是很安全的。 Hash函数,又称散列函数、哈希函数。Hash函数将数据计算成一个固定长度的特征值。 前面已经说过了,Hash算法的加密是单向的。在一些只需要确认数据的有效性、正确性,而不需要确认数据的内容的场合适合使用(比如前面说的论坛密码)。 常见的Hash函数有MD5、SHA、CRC等。 MD5全称信息-摘要算法5(Message-Digest Algorithm 5),在MD5之前还有MD4、MD3等。MD5产生128位的Hash值 MD5的应用很广泛,比如BT下载校验文件的方式就是MD5。 但是MD5在2004年被我国密码学家王小云证明是可以产生碰撞(两个不同的数据产生相同的Hash值就称为“碰撞”)的,并在2008年由荷兰数学家成功地将两个可执行文件产生了碰撞。 SHA全称安全散列算法(Secure Hash Algorithm)。SHA并不是一种算法,而是一个算法家族。 最初的算法称为SHA-0,但是很快被发布者NSA收回,随后发布了改进的SHA-1。这两种算法产生160位的Hash值。 现在较常用的是SHA-1,以及SHA-2。SHA-2有几种不同长度Hash值的算法,分别为SHA-224、SHA-256,SHA-384和SHA-512。 CRC全称循环冗余校验(Cyclic Redundancy Check),这是一种在网络协议中比较常见的Hash算法。CRC有多种不同规范,常见的有CRC-32、CRC-64。 ZIP、RAR等压缩格式对压缩文件的校验使用的就是CRC-32。用WinRAR打开压缩文件,可以看到有一栏就是“CRC32”。 数据的加密是为了数据的安全性,但有加密就有破解。希望各位善用技术,不要去为了非法获取他人的数据而去破解。 ==========之前的文章========== 科普第1篇——计算机色彩 科普第1篇补遗——CSS颜色 科普第2篇——光盘 科普第3篇——2、8、10、16 科普第4篇——电池 科普第5篇——浏览器 科普第6篇——字符编码 科普番外篇1——虽然没用但了解一下也很有趣的知识 |
|
沙发#
发布于:2013-03-09 08:44
|
|
|
2楼#
发布于:2013-02-11 08:41
WinHex的内存搜索编辑功能可以帮我们找回丢失的还原精灵密码。具体方法是:右击任务栏右下角的还原精灵图标,在弹出菜单中选择“参数设置→更改密码”,在对话框中输入旧密码,胡乱填写几个数字如123456;在新密码框中输入新密码,这里也胡乱填了个371042,最后点“确定”按钮。
由于我们是胡乱输入的密码,所以旧密码是不会正确的,此时会弹出对话框,提示密码不正确,注意千万不要点击“确定”按钮,赶紧运行16进制文件编辑器WinHex,点“工具”菜单中的“RAM编辑器”,在打开的窗口中找到Hddgmon下的“主要内存”,这里的Hddgmon是还原精灵的进程。 最后,在WinHex中点击“搜寻→寻找文字”菜单选项,在打开的窗口中添入你随便填入的假密码371042。点“确定”之后,真正的密码就会出现在我们面前了! 原理:输入密码后,该软件会用其内部事先定义好的方法来计算真正的密码,与输入的密码进行比较,这个比较的过程是在内存中进行的。由于WinHex具有优秀的内存编辑功能,因此通过在内存中搜索输入的字符串,来找到它们。 (有缘的研究吧,给个研究方向,仅此而已) |
|
|
3楼#
发布于:2013-02-02 15:19
不用解密也行吧?绕过或骗过那个看门的程序就行了吧?
![]() |
|
|
4楼#
发布于:2011-01-01 22:35
那。。碰上高手不是加密都没用。。
|
|
|
5楼#
发布于:2011-01-01 15:55
加密和解密~~~~~也就是通过一个算法装换成另一种数据,在通过一种算法进行还原~~~
不过正算法和逆算法可一样,也可以不一样~~~ 感觉好复杂啊 |
|
6楼#
发布于:2011-01-01 15:47
你不说我都不知道计算器还有个科学型计算……
那那些插件用的是哪种加密?为什么插件区一些高手还说解密不能哩?害我还以为真的没得解密。 |
|