qakcn
学生会会长
学生会会长
  • 注册日期2008-10-31
  • 最后登录2021-01-05
  • 生日1988-8-18
  • 光玉3394颗
阅读:2796回复:6

科普第7篇——加密解密

楼主#
更多 发布于:2011-01-01 15:18
今天看到大帝公告区的那个帖子,促使我写了这个早就要写的东西。
服务器里是不保存各位的密码的,自己的密码只有自己知道。那么论坛程序怎么验证密码是否正确呢?往下看你就知道了。

数据的安全,是人们一直很关心的问题,但是纷繁复杂的环境难保数据不被截获,加密技术的诞生就是为了保证数据被截获之后也无法被利用,提高数据的安全性。

加密(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——虽然没用但了解一下也很有趣的知识
喜欢0 评分0
梦幻的夏
光坂学士生
光坂学士生
  • 注册日期2008-10-29
  • 最后登录2014-08-21
  • 生日1986-4-15
  • 光玉3005颗
沙发#
发布于:2011-01-01 15:47
你不说我都不知道计算器还有个科学型计算……
那那些插件用的是哪种加密?为什么插件区一些高手还说解密不能哩?害我还以为真的没得解密。
回复(0) 喜欢(0)     评分
ct一剑
光坂博士生
光坂博士生
  • 注册日期2010-10-04
  • 最后登录2014-08-21
  • 生日1991-10-16
  • 光玉13939颗
2楼#
发布于:2011-01-01 15:55
加密和解密~~~~~也就是通过一个算法装换成另一种数据,在通过一种算法进行还原~~~
不过正算法和逆算法可一样,也可以不一样~~~

感觉好复杂啊
回复(0) 喜欢(0)     评分
serffyme水草~
光坂学士生
光坂学士生
  • 注册日期2008-12-11
  • 最后登录2020-04-28
  • 生日1989-11-27
  • 光玉4876颗
3楼#
发布于:2011-01-01 22:35
那。。碰上高手不是加密都没用。。
回复(0) 喜欢(0)     评分
██★██
光坂二年生
光坂二年生
  • 注册日期2011-09-10
  • 最后登录2017-06-02
  • 生日1989-10-24
  • 光玉335颗
4楼#
发布于:2013-02-02 15:19
不用解密也行吧?绕过或骗过那个看门的程序就行了吧?
I thought what I’d do was, I’d pretend I was one of those deaf-mutes?
回复(1) 喜欢(0)     评分
██★██
光坂二年生
光坂二年生
  • 注册日期2011-09-10
  • 最后登录2017-06-02
  • 生日1989-10-24
  • 光玉335颗
5楼#
发布于:2013-02-11 08:41
WinHex的内存搜索编辑功能可以帮我们找回丢失的还原精灵密码。具体方法是:右击任务栏右下角的还原精灵图标,在弹出菜单中选择“参数设置→更改密码”,在对话框中输入旧密码,胡乱填写几个数字如123456;在新密码框中输入新密码,这里也胡乱填了个371042,最后点“确定”按钮。
由于我们是胡乱输入的密码,所以旧密码是不会正确的,此时会弹出对话框,提示密码不正确,注意千万不要点击“确定”按钮,赶紧运行16进制文件编辑器WinHex,点“工具”菜单中的“RAM编辑器”,在打开的窗口中找到Hddgmon下的“主要内存”,这里的Hddgmon是还原精灵的进程。
最后,在WinHex中点击“搜寻→寻找文字”菜单选项,在打开的窗口中添入你随便填入的假密码371042。点“确定”之后,真正的密码就会出现在我们面前了!
原理:输入密码后,该软件会用其内部事先定义好的方法来计算真正的密码,与输入的密码进行比较,这个比较的过程是在内存中进行的。由于WinHex具有优秀的内存编辑功能,因此通过在内存中搜索输入的字符串,来找到它们。

(有缘的研究吧,给个研究方向,仅此而已)
I thought what I’d do was, I’d pretend I was one of those deaf-mutes?
回复(0) 喜欢(0)     评分
abraher
光坂国中生
光坂国中生
  • 注册日期2011-06-14
  • 最后登录2013-03-17
  • 生日2013-1-1
  • 光玉11颗
6楼#
发布于:2013-03-09 08:44
██★██:不用解密也行吧?绕过或骗过那个看门的程序就行了吧?回到原帖
订正一下,一般网站会使用IDS设备,想要骗过的话就要放弃很多语句,然后再解密,某认为会很困难…………
回复(0) 喜欢(0)     评分
游客

返回顶部