一、前言

个人认为,PHP是世界上为数不多,最人性化的语言。

虽然是二次开发、弱类型语言,由C/C++编写的PHP引擎去解析。但是,其代码优雅性和其运行速度不亚于,其他编译语言。

二、PHP数据加密

数据加密的类型有:

MD5、sha1、sha256、CRC32多项式冗余校验等。

1. MD5、sha1、sha256


描述:hash加密算法,不可逆。常用于数据验证与密码验证。

例如:

 <?php
echo md5(md5('123456' . DX))

2. CRC32

描述:多项冗余校验,不可逆。常用于校验数据的完整性,可用于校验目标文件是否修改。

例如:

 <?php
$file = realpath('main.js') . filemtime(realpath('main.js') );
echo printf("%x", crc32($file));

注:

因为PHP数值底层存储都是带符号的,这里把值处理成16进制。

如果,main.js文件被修改,则输出结果也会变化;

3. base64_encode和base64_decode

描述:数据压缩加密,可逆。常用于数据加密、传输。通常和strtr函数一起使用。

例如:

 <?php
$tr = 'www.baidu.com';
echo base64_encode($tr);
echo '<hr />';
echo strtr(base64_encode($tr), 'c=Z', '-_/');
echo '<hr />';
$rtr = strtr(base64_encode($tr), '-_', 'c=z');

strtr函数描述:

详情请查看php.net

简单介绍:字符串替换。

4. password_hash、password_valid

描述:哈希加密,不可逆。常用于数据加密和认证。

例如:

 //算法递归层数
$cost = 4;
//盐值
$salt = '1234567891234567891234';
//指定盐值 最小值22; 指定算法递归层数 最小值4 最大值 25
echo password_hash('123456', PASSWORD_DEFAULT, ['cost' => $cost, 'salt' => $salt]);
echo '<hr />';
echo password_verify('123456', '$2y$06$KfKrG52XutkMN9DcGeczVOVqGCDtMYWHk5BaqH/nu0tX/jjqhTGgO');

解析:

password_hash()

参数一:加密字符串

参数二:加密hash算法,PASSWORD_DEFAULT为默认bcrypt哈希算法。其他关于更多的算法,请百度搜索自行了解一下。

参数三:选项。数组类型,数组元素可选。

cost hash算法递归层数。

salt 哈希算法,加入的盐值,即:干扰字符。

PHP7.0建议,参数二、参数三都为默认值。

password_valid()

hash验证。

三、计算机底层数据存储和传输

一、计算机底层数据存储unicode编码。

a、计算机数据传输为UTF-8编码格式。

b、strlen对存储数据以UTF-8形式转码解析,并以8bit为一个byte进行计算字符单位长度。

c、mb_strlen() 对存储数据以UTF-8形式转码,其参数二为可指定参数。UTF-8、unicode、8bit,默认为UTF-8解析字符单位长度。若计算汉字字符,指定参数二为UTF-8,则该函数以UTF-8计算该字符长度,比如:“代码”,则是两个字节长度。

在unicode协议中,一个中文汉字为2byte。UTF-8协议中一个中文汉字为3byte。所以参数二指定为unicode时,则 “代码” 这串字符为三个单位长度。

四、总结

a. 如果我们做web应用,用于客户端登陆注册验证时,我们可以用MD5、sha1、sha256、password_hash、password_valid等哈希加密验证。

b. 如果我们让目标文件随源文件的更改而改变,那么我们就可以使用CRC32对数据进行加密,生成目标文件。

c. 计算机底层数据存储在Unicode时代,则所有字符都以两个字节存储,那么如果是单字节字符,则补位0。那么UTF-8就作为传输数据的数据编码格式出现在计算机的舞台。我们的PHP底层函数解析,都是以UTF-8的编码协议解析。在Unicode中一个中文汉字为2byte。而UTF-8中,一个中文汉字为3byte 。

参考文献:

https://www.cnblogs.com/leesf456/p/5317574.html

php数据加密及数据存储和传输的更多相关文章

  1. 探讨.NET Core数据加密和解密问题

    前言 一直困扰着我关于数据加密这一块,24号晚上用了接近3个小时去完成一项任务,本以为立马能解决,但是为了保证数据的安全性,我们开始去对数据进行加密,然后接下来3个小时专门去研究加密这一块,然而用着用 ...

  2. 大数据时代,Wyn Enterprise和您一起探讨CIO的困境和出路 ZT

    这是一篇知识分享帖,如果您致力于成为一名CIO,希望您能够阅读完,信息虽然简略,但我们依然希望可以帮到您. CIO:首席信息官 CIO是干什么的 一.经典的CIO主要负责什么 1.IT战略规划.IT预 ...

  3. 探讨.NET Core数据进行3DES加密和解密问题

    前言 一直困扰着我关于数据加密这一块,24号晚上用了接近3个小时去完成一项任务,本以为立马能解决,但是为了保证数据的安全性,我们开始去对数据进行加密,然后接下来3个小时专门去研究加密这一块,然而用着用 ...

  4. 释放数据价值:DAYU数据运营新能力解读

    摘要:从比特到信息,这说的其实就是企业数字化转型,让数据的价值充分发挥出来,变成信息. 今天,企业对数据越来越重视,数据已经成为了企业新型的资产,甚至是核心资产,最近流传一句非常有意思的话:从比特到信 ...

  5. MySQL:用户管理

    用户管理部分 一.数据库不安全因素 非授权用户对数据库的恶意存取和破坏: 数据库中重要或敏感的数据被泄露: 安全环境的脆弱性: 二.数据库安全的常用方法 用户标识和鉴别[使用口令鉴别]::该方法由系统 ...

  6. [工作中的设计模式]装饰模式decorator

    一.模式解析 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的要点主要是: 1.需要对已有对象扩展新的功能,又不希望改变原有对 ...

  7. 介绍Ext JS 4.2的新特性的《深入浅出Ext JS》上市

    以用户为中心的时代,应用的界面外观变得越来越重要.然而,很多程序员都缺乏美术功底,要开发出界面美观的应用实属不易.Ext JS的出现,为广大程序员解决了这一难题.它有丰富多彩的界面和强大的功能,是开发 ...

  8. Java文件操作①——XML文件的读取

    一.邂逅XML 文件种类是丰富多彩的,XML作为众多文件类型的一种,经常被用于数据存储和传输.所以XML在现今应用程序中是非常流行的.本文主要讲Java解析和生成XML.用于不同平台.不同设备间的数据 ...

  9. RAID对硬盘的要求及其相关

    Raid 0:至少需要两块硬盘,磁盘越多,读写速度越快,没有冗余. Raid 1:只能用两块硬盘,两块硬盘的数据互为镜像(写慢,读快),一块磁盘冗余. Raid 5:至少需要3块硬盘,一块磁盘冗余. ...

随机推荐

  1. AutoResetEvent 2

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. hql基础入门

    [转]进入HQL世界 一个ORM框架是建立在面向对象的基础上的.最好的例子是Hibernate如何提供类SQL查询.虽然HQL的语法类似于SQL,但实际上它的查询目标是对象.HQL拥有面向对象语言的所 ...

  3. Tomcat启动过程[更详细]

    原文地址:http://blog.csdn.net/jiaomingliang/article/details/47427083

  4. 初识JavaScriptOOP(js面向对象)

    初识JavaScriptOOP(js面向对象) Javascript是一种基于对象(object-based)的语言, 你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言 ...

  5. Hibernate课程 初探一对多映射5-2 Eclipse添加数据库连接

    1 Eclipse新建java项目 2 Windows ==> show view == >other ==>Data source Explorer 3 左侧视图 database ...

  6. Redis整理第三波(生存时间、事务管理)

    expire  设置生存时间 Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即到期后数据销毁. TTL查看key的剩余时间,当返回值为-2时,表示键被删除. 当 ...

  7. JQ单双引号转义

    var temp = "${row.address_province}"; alert(temp);——————即变量temp alert("\'"+temp+ ...

  8. FragmentPagerAdapter 与 FragmentStatePagerAdapter的区别。通过验证证明的。

    在一个 Android 应用中,我使用 FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动.不过我碰到了一个问题,即当 Fragment 对应的数据集发生改变时,我希 ...

  9. 【起航计划 004】2015 起航计划 Android APIDemo的魔鬼步伐 03 App->Activity->Animation Activity跳转动画 R.anim.×× overridePendingTransition ActivityOptions类

    App->Activity->Animation示例用于演示不同Activity切换时动态效果. android 5.0例子中定义了6种动画效果: 渐变Fade In 缩放Zoom In ...

  10. Springboot开源项目实例整理

    https://www.imooc.com/article/67664 ---------------------------------------------------------------- ...