加密算法

在php的开发过程中,常常需要对部分数据(如用户密码)进行加密

一、加密类型:

1.单向散列加密

就是把任意长度的信息进行散列计算,得到固定长度的输出,这个散列计算过程是单向的,即不能对固定长度的输出信息进行计算从而得到输入信息。

(1)特征:雪崩效应、定长输出和不可逆。
(2)作用是:确保数据的完整性。
(3)加密算法:md5(标准密钥长度128位)、sha1(标准密钥长度160位)、md4、CRC-32

2.对称散列加密

对称加密是指加密和解密是使用同一个密钥,或者可以互相推算。

(1)加密方和解密方使用同一个密钥。
(2)加密解密的速度比较快,适合数据比较长时的使用。
(3)密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦。
(4)加密算法:DES(Data Encryption Standard)、3DES、AES(Advanced Encryption Standard,支持128、192、256、512位密钥的加密)、Blowfish。

3.非对称散列加密

非对称加密和解密使用的不是同一个密钥,其中一个对外公开,称作公钥,另一个只有所属者知道,称作私钥。

(1)每个用户拥用一对密钥加密:公钥和私钥。
(2)公钥加密,私钥解密;私钥加密,公钥解密。
(3)公钥传输的过程不安全,易被窃取和替换。
(4)由于公钥使用的密钥长度非常长,所以公钥加密速度非常慢,一般不使用其去加密。
(5)某一个用户用其私钥加密,其他用户用其公钥解密,实现数字签名的作用。
(6)公钥加密的另一个作用是实现密钥交换。
(7)加密和签名算法:RSA、ELGamal。
(8)公钥签名算法:DSA。

注释:

(1)RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
(2)DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);

(3)由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。
对称加密算法不能实现签名,因此签名只能非对称算法。
(4)由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。
(5)在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。

二、php中常用的加密函数:

1.MD5加密:

string md5 ( string str[,bool raw_output = false ] )

(1)md5()默认情况下以 32 字符十六进制数字形式返回散列值,它接受两个参数,第一个为要加密的字符串,第二个为raw_output的布尔值,

默认为false,如果设置为true,md5()则会返回原始的 16 位二进制格式报文摘要

(2)md5()为单向加密,没有逆向解密算法,但是还是可以对一些常见的字符串通过收集,枚举,碰撞等方法破解

2.Crypt加密:

string crypt ( string str[,string salt])

(1)crypt()接受两个参数,第一个为需要加密的字符串,第二个为盐值(就是加密干扰值,如果没有提供,则默认由PHP自动生成);

返回散列后的字符串或一个少于 13 字符的字符串,后者为了区别盐值。

(2)crypt()为单向加密,跟md5一样。

3.Sha1加密:

string sha1 ( string str[,bool
s
t
r
[
,
b
o
o
l
raw_output = false ])

(1)跟md5很像,不同的是sha1()默认情况下返回40个字符的散列值,传入参数性质一样,第一个为加密的字符串,

第二个为raw_output的布尔值,默认为false,如果设置为true,sha1()则会返回原始的20 位原始格式报文摘要

(2)sha1()也是单行加密,没有逆向解密算法

4.Urlencode加密:

string urlencode ( string $str )

(1)一个参数,传入要加密的字符串(通常应用于对URL的加密)

(2)urlencode为双向加密,可以用urldecode来解密(严格意义上来说,不算真正的加密)

(3)返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。

(3)常见的urlencode()的转换字符

? => %3F
= => %3D
% => %25
& => %26
\ => %5C

空格 => %5C
5.base64编码加密:

string base64_decode ( string $encoded_data )

(1)base64_encode()接受一个参数,也就是要编码的数据(这里不说字符串,是因为很多时候base64用来编码图片)

(2)base64_encode()为双向加密,可用base64_decode()来解密

md5加密

md5是单向的,只能加密,不能解密
输入任意长度的值,输出的都是128位信息值
不同的输入对应的一定是不同的输出,保证唯一性
md5还是会出现碰撞现象
关于md5的详细介绍,包括优缺点,见:MD5及加密算法优劣
crypt加密

crypt也是单向的,只能加密,不能解密
crypt在不同系统上的加密算法是不一样的,参见:PHP手册-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

主要应用在图片的编码和解码上

作者:我又回到那老街
来源:CSDN
原文:https://blog.csdn.net/a2522086223/article/details/85413502
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值