zoukankan      html  css  js  c++  java
  • php数据加密及数据存储和传输

    一、前言

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

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

    二、PHP数据加密

    数据加密的类型有:

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

    1. MD5、sha1、sha256


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

    例如:

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

    2. CRC32

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

    例如:

    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建议,参数二、参数三都为默认值。

    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

  • 相关阅读:
    Linux上面执行 Windows 命令(比如 重启服务)的简单方法
    Linux 通过cksum 来判断文件是否是相同
    Linux 根据端口快速停止服务并启动的办法
    Delphi控件开发浅入深出(三)
    Delphi 资源文件( .res)
    C++中模块(Dll)对外暴露接口的方式
    delphi Align属性
    cport串口控件的应用
    两款工控控件对比评测:Iocomp和ProEssentials
    Android 将ARGB图片转换为灰度图
  • 原文地址:https://www.cnblogs.com/cleverstone/p/9454991.html
Copyright © 2011-2022 走看看