urlencode/base64/sha1/md5学习

来源:互联网 发布:网络剧老炮儿2 编辑:程序博客网 时间:2024/06/02 05:07

1.urlencode

       url编码主要是为了解决一些url中的一些特殊字符和歧义字符或者中文字符的传输问题,其原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%,在php中urlencode函数的作用为:将除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。

同时,当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的,因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符。url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。(主要就是消除服务器解析url时的奇异)

$string = "&年龄=10&性别=m";$string = urlencode($string);print_r($string); //%26%E5%B9%B4%E9%BE%84%3D10%26%E6%80%A7%E5%88%AB%3Dm
2.base64

        理解成可逆加密算法,只能防肉眼看到真实内容,按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.) 常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE64加密的。 

$string = "&年龄=10&性别=m";$string = base64_encode($string);print_r($string); //JuW5tOm+hD0xMCbmgKfliKs9bQ==

疑问:base64和urlencode能否相互取代?
网上找了一些答案,找到了一些合理的:
base64能否取代urlencode?
Base64编码使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。其中的+, /, = 都是需要urlencode的,所以无法取代。
urlencode能够取代base64?
为了兼容网络上的一些很古老的设备,   这些古董设备只能识别 base64编码的字符,同时urlencode 对二进制数据的效率不高,base64 会有效降低 %xx 的出现次数。

3.MD5

        MD5是一种信息摘要算法,主要是通过特定的hash散列方法将文本信息转换成简短的信息摘要,压缩+加密+hash算法的结合体,是绝对不可逆的。其典型应用是对一段文本信息产生信息摘要,以防止被篡改。常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。

$string = "&年龄=10&性别=m";$string = md5($string);print_r($string);//2bbd840ca251fd547c140374621d6ddb

4.sha1

     安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。

sha1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要,(但会有1x10 ^ 48分之一的机率出现相同的消息摘要,一般使用时忽略)。

$string = "&年龄=10&性别=m";$string = sha1($string);print_r($string);//0b9694acba4ea2c80cf977445512376d206d16f1
MD5与SHA-1比较: 
        由于MD5 与SHA-1均是从MD4 发展而来,它们的结构和强度等特性有很多相似之处,SHA-1与MD5 的最大区别在于其摘要比MD5 摘要长 32 比特。对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度:MD5 是2128 数量级的操作,SHA-1 是2160 数量级的操作。产生具有相同摘要的两个报文的难度:MD5是 264 数量级的操作,SHA-1 是280 数量级的操作。因而,SHA-1 对强行攻击的强度更大。但由于SHA-1 的循环步骤比MD5 多(80:64)且要处理的缓存大(160 比特:128 比特),SHA-1 的运行速度比MD5 慢。 
        MD5 和SHA-1 是单项散列函数的典型代表,它们广泛地应用在信息安全和数字签名等各个领域。从而有效地抗击了信息的主动式攻击,本文基于AVR 单片机实现了这两种算法,并结合汇编语言尽心了优化,取得了较好的效果。根据信息安全的要求的不同层次可以灵活选择这两种算法从而达到实际目的。