PHP中几种常见的加密形式
- md5()加密算法
- crypt()加密算法
- sha1()加密算法
- url()加密算法
- base64()加密算法
md5加密
- md5是单向的,只能加密,不能解密
- 输入任意长度的值,输出的都是128位信息值
- 不同的输入对应的一定是不同的输出,保证唯一性
- md5还是会出现碰撞现象
- 关于md5的详细介绍,包括优缺点,见:
crypt加密
- crypt也是单向的,只能加密,不能解密
- crypt在不同系统上的加密算法是不一样的,参见:
- 需要两个参数,两个参数都是必选的,在PHP5之后:
- 第一个参数是你需要加密的字符串
- 第二个参数是干扰串(或者叫做密钥),最多两位字符,会加在密文的开头两位
- 从 PHP 5.3.0 起,PHP 包含了它自己的实现,并将在系统缺乏相应算法支持的时候使用它自己的实现。
sha1加密
- sha1也是单向的,只能加密,不能解密
URL编码加密
- 两个函数:urlencode()和urldecode(),这个加密是双向的,能加密,页能解密
- 加密规则:给定字符串中除了:字母,数字,下划线,中划线,点之外的其他所有字符都会被加密为百分号后跟两位的16进制数,空格被编码为加号
- 与上面两个稍微有点不同的两个函数:rawurlencode()和rawurldecode()
- 区别就是urlencode是把空格加密成加号(+),而rawurlencode是把空格加密成%20
- 就这一个区别,推荐使用rawurlencode函数对,统一标准
base64加密
- bsae64不是真正意义上的加密,而是对数据进行编码和解码
- 是双向的,可以编码,也可以解码
- 两个函数:base64_encode和base64_decode
- 主要应用在图片的编码和解码上
总结:
信息加密技术分类
- 单项散列加密
- 是指:通过对不同输入长度的信息进行散列计算,得到固定长度的输出,这个散列计算的过程是单向的,即不能对固定长度的输出进行计算从而获得输入信息
- 对称散列加密
- 是指:加密和解密使用的密钥是同一个密钥或者可以互相推算
- 优点:算法简单,效率高
- 缺点:加解密使用的同一个密钥,如果密钥被盗,丢失,泄露,密文实际上就跟明文无差别
- 非对称散列加密
- 是指:加解密使用的密钥不是同一个密钥,其中一个对外公开,被称作公钥,另一个只有所有者知道
- 用公钥加密的密文,只能使用私钥才能解开
- 反之,用私钥加密的密文,也只能用公钥才能解开
- 实际的意思就是说:加密的时候是一个密钥,解密是另一个密钥,其实并不区分什么是公私密钥
- 应用领域:一般在信息安全传输和数字签名等
没有什么加密方式是能一劳永逸的,破解只是时间问题