加密

作者: ethan_cun | 来源:发表于2016-10-10 18:35 被阅读147次

MD5加密

MD5加密是最常用的加密方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码。

MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是绝对的,但基本是不能一样的)。

MD5算法还具有以下性质:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

MD5虽然说是不可逆的 但是由于有网站http://www.cmd5.com的存在,专门用来查询MD5码 所以有的简单的MD5码是可以在这里搜到源码的。

为了让MD5码更加安全 涌现了很多其他方法 如加盐。 盐要足够长足够乱 得到的MD5码就很难查到。

终端代码:$ echo -n abc|openssl md5          给字符串abc加密、

RSA加密

RSA非对称加密算法

非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)


公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密

特点:

非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快

对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了

基本加密原理:

(1)找出两个“很大”的质数:P & Q

(2)N = P * Q

(3)M = (P – 1) * (Q – 1)

(4)找出整数E,E与M互质,即除了1之外,没有其他公约数

(5)找出整数D,使得E*D除以M余1,即 (E * D) % M = 1

经过上述准备工作之后,可以得到:

E是公钥,负责加密

D是私钥,负责解密

N负责公钥和私钥之间的联系

加密算法,假定对X进行加密

(X ^ E) % N = Y

n根据费尔马小定义,根据以下公式可以完成解密操作

(Y ^ D) % N = X

但是RSA加密算法效率较差,对大型数据加密时间很长,一般用于小数据。

常用场景:

分部要给总部发一段报文,先对报文整个进行MD5得到一个报文摘要,再对这个报文摘要用公钥加密。然后把报文和这个RSA密文一起发过去。

总部接收到报文之后要先确定报文是否在中途被人篡改,就先把这个密文用私钥解密得到报文摘要,再和整个报文MD5一下得到的报文摘要进行对比 如果一样就是没被改过。

Base64加密原理

Base64是一种加料置位加密法,那为什么叫base64呢?因为无论明文是什么(比如汉字,特殊符号等),加密后的密文都只会变成字母A-Z、a-z和0-9 和+和/这64个字符,被他加密体后积一般会变成原来的4/3。

Base64的标准在RFC2045里的24页可以看到。

http://wenku.baidu.com/view/bd567523aaea998fcc220e8e.html

下面我就来加密一个astralidea的简写AST来说明他的加密原理。

为了说明方便,我们用人的思考方式,而不是计算机的方式,下面是上图的说明。

1.假设有3个字符,首先先将他换成10进制ASCII码,然后转成2进制,少位用0补齐,保证8位。

2.因为ASCII码大小是一字节也就是8位,3个8位。又因为3*8=4*6,我们给他分成4分,每份6位。如果少位都用0补齐。

3.把6位码前2位加两个0,比如010000转完后就是00010000,这对计算机来说比较重要,变成了8位码。

4.将4个8位(也就是一字节)码按照RFC里的BASE64标准换算,下面也提供了标准表。

这样我们就得到了QVNU,也就是AST加密的结果。

下面是标准的BASE64编码表。

那么有3N个字符就是分别把3个转成4个了,那假如有3N+1个字符怎么办呢?

BASE64是这样规定的,剩下的用“=”补齐。

比如A这个字符转后为01000001末尾加4个0变为010000|010000查表得QQ差2个用=补齐。

因此A加密后是QQ==,对于3N+2情况

同理AS加密后为QVM=

这样就有了所有情况了。

说了这么多,我们给出实现加密的代码,从这里更可以看出加密过程简洁的表达:

当然如果你用.net库你可以直接调用

byte[] bytes=Encoding.Default.GetBytes("ConvertString");

Convert.ToBase64String(bytes);

即可。

应用:

1.由于BASE64可以加密任何的字符,那么我们可以把一个小程序比如几K的EXE文件加密,然后就可以发到网页上,因为BASE64标准没有非法字符,放到任何空间都应该不会有问题。然后另一边复制下来解密就OK了,这样可以省得传到网络硬盘各种原因(比如病毒上传失败)之类的问题。

2.BASE64最初是考虑加密后让你不能一眼看出明文是什么而出现的,其最主要的应用当然是加密了,比如迅雷就是通过BASE64加料后加密而实现的。

比如我虚拟一个地址http://www.astralidea.com/down.exe

我们知道这个地址根本不存在,假设我们会了BASE64怎么模拟迅雷的地址呢?

1.迅雷把上面地址加上料AA和ZZ变成:AAhttp://www.astralidea.com/down.exeZZ

2.把上面的字符加密得:QUFodHRwOi8vd3d3LmFzdHJhbGlkZWEuY29tL2Rvd24uZXhlWlo=

3.再前面加上thunder://得:thunder://QUFodHRwOi8vd3d3LmFzdHJhbGlkZWEuY29tL2Rvd24uZXhlWlo=

你会发现加密后的和我虚拟的是一样的。

FLASHGET原理也是一样,只不过加的料为[FLASHGET]。

而QQ旋风干脆不加料,直接就对地址进行BASE64编码了。

3.Asp.Net里的viewstate就是用BASE64加密所得的,如果了解了这个可以把他解密就能得到一个XML文件,找到key-value pairs

4.BASE64变体,上面所说的都是标准的BASE64,如果我们把加密表里的内容替换或打乱顺序就成了变异的BASE64,如Uuencode加密方法原理一样,但是加密表不一样。

。。。。。

那么BASE64是怎么解密的呢?只要你动动脑筋自己也写一写,一定能写出来。

相关文章

  • Android数据加密(转)

    Android数据加密之Rsa加密 Android数据加密之Aes加密 Android数据加密之Des加密 And...

  • iOS常见信息加密方式总结

    目录 MD5加密HMAC加密base64加密对称加密RSA加密 - 非对称加密 一.MD5加密 MD5加密是最常用...

  • 加密算法的理解

    加密算法按类型分类: 对称加密、非对称加密、散列算法 对称加密: 加密双方都持有加密算法及密钥 非对称加密: 加密...

  • Web开发必须了解的密码学技术

    对称加密与非对称加密 按照密钥的使用形式,加密算法可以分为对称加密和非对称加密(又叫公钥加密)。对称加密在加密和解...

  • iOS 关于加密

    常见的iOS代码加密常用加密方式包括Base64加密、MD5加密、AES加密、RSA加密等。 Base64加密 B...

  • iOS代码加密常用加密方式

    iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密、AES加密、BASE64加密,三大...

  • iOS常用加密方式

    iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密、AES加密、BASE64加密,三大...

  • 4.加密函数编写

    加密算法分类: md5系列加密 ,哈希算法类型 aes加密对称加密,加密/解密是一个密钥 rsa加密 非对称加密,...

  • 加密算法的应用

    加密算法的应用 [TOC] 加密算法 加密算法主要分为对称加密和非对称加密。 对称加密 对称加密采用了对称密码编码...

  • PHP加密算法

    加密技术的重点是加密算法,加密算法主要分为三类: 对称加密 非对称加密 不可逆加密 对称加密算法 加密过程: 将明...

网友评论

      本文标题:加密

      本文链接:https://www.haomeiwen.com/subject/gnrvyttx.html