1、前言php
我的认为,PHP是世界上为数很少,最人性化的语言。html
虽然是二次开发、弱类型语言,由C/C++编写的PHP引擎去解析。可是,其代码优雅性和其运行速度不亚于,其余编译语言。web
2、PHP数据加密算法
数据加密的类型有:数组
MD五、sha一、sha25六、CRC32多项式冗余校验等。函数
1. MD五、sha一、sha256编码
描述:hash加密算法,不可逆。经常使用于数据验证与密码验证。加密
例如:spa
1 <?php 2 echo md5(md5('123456' . DX))
2. CRC32.net
描述:多项冗余校验,不可逆。经常使用于校验数据的完整性,可用于校验目标文件是否修改。
例如:
1 <?php 2 $file = realpath('main.js') . filemtime(realpath('main.js') ); 3 echo printf("%x", crc32($file));
注:
由于PHP数值底层存储都是带符号的,这里把值处理成16进制。
若是,main.js文件被修改,则输出结果也会变化;
3. base64_encode和base64_decode
描述:数据压缩加密,可逆。经常使用于数据加密、传输。一般和strtr函数一块儿使用。
例如:
1 <?php 2 $tr = 'www.baidu.com'; 3 echo base64_encode($tr); 4 echo '<hr />'; 5 echo strtr(base64_encode($tr), 'c=Z', '-_/'); 6 echo '<hr />'; 7 $rtr = strtr(base64_encode($tr), '-_', 'c=z');
strtr函数描述:
详情请查看php.net
简单介绍:字符串替换。
4. password_hash、password_valid
描述:哈希加密,不可逆。经常使用于数据加密和认证。
例如:
1 //算法递归层数 2 $cost = 4; 3 //盐值 4 $salt = '1234567891234567891234'; 5 //指定盐值 最小值22; 指定算法递归层数 最小值4 最大值 25 6 echo password_hash('123456', PASSWORD_DEFAULT, ['cost' => $cost, 'salt' => $salt]); 7 echo '<hr />'; 8 echo password_verify('123456', '$2y$06$KfKrG52XutkMN9DcGeczVOVqGCDtMYWHk5BaqH/nu0tX/jjqhTGgO');
解析:
password_hash()
参数一:加密字符串
参数二:加密hash算法,PASSWORD_DEFAULT为默认bcrypt哈希算法。其余关于更多的算法,请百度搜索自行了解一下。
参数三:选项。数组类型,数组元素可选。
cost hash算法递归层数。
salt 哈希算法,加入的盐值,即:干扰字符。
PHP7.0建议,参数2、参数三都为默认值。
password_valid()
hash验证。
3、计算机底层数据存储和传输
1、计算机底层数据存储unicode编码。
a、计算机数据传输为UTF-8编码格式。
b、strlen对存储数据以UTF-8形式转码解析,并以8bit为一个byte进行计算字符单位长度。
c、mb_strlen() 对存储数据以UTF-8形式转码,其参数二为可指定参数。UTF-八、unicode、8bit,默认为UTF-8解析字符单位长度。若计算汉字字符,指定参数二为UTF-8,则该函数以UTF-8计算该字符长度,好比:“代码”,则是两个字节长度。
在unicode协议中,一个中文汉字为2byte。UTF-8协议中一个中文汉字为3byte。因此参数二指定为unicode时,则 “代码” 这串字符为三个单位长度。
4、总结
a. 若是咱们作web应用,用于客户端登录注册验证时,咱们能够用MD五、sha一、sha25六、password_hash、password_valid等哈希加密验证。
b. 若是咱们让目标文件随源文件的更改而改变,那么咱们就能够使用CRC32对数据进行加密,生成目标文件。
c. 计算机底层数据存储在Unicode时代,则全部字符都以两个字节存储,那么若是是单字节字符,则补位0。那么UTF-8就做为传输数据的数据编码格式出如今计算机的舞台。咱们的PHP底层函数解析,都是以UTF-8的编码协议解析。在Unicode中一个中文汉字为2byte。而UTF-8中,一个中文汉字为3byte 。
参考文献: