最新公告
  • 欢迎您访问爱上源码网,分享精品整站源码,网站模板,游戏源码,APP小程序源码以及视频教程免费下载;服务永无止境!立即加入我们
  • PHP 数据加密的方法

    环境 Apache PHP-7.0.12

    加密解决了什么问题:

    1.防止通信内容被窃听;

    2.防止通信内容被篡改

    加密类型:

    1.对称加密:加密与解密使用的是同一个秘钥,例:DES(Data Encryption Standard),1977-1999年,1999年被破解;AES(Advance Encryption Standard),目前最流行的对称加密算法

    2.非对称加密:RSA

    AES 加密 / 解密

    1.使用PHP加密/解密函数 openssl_encrypt/openssl_decrypt

    注意:有很多例子使用的是PHP mcrypt_encrypt() 函数,官网给我的解释:This function has been DEPRECATED as of PHP 7.1.0. Relying on this function is highly discouraged.

    //获取可用的密码加密算法列表
    //$methods = openssl_get_cipher_methods();
    //var_dump($methods);
    # AES加密演示
    //明文(要加密的内容)
    $str = "这是测试用例 我是明文";
    //秘钥(用例:使用uniqid()函数生成了一个唯一ID)
    $key = "5d3fb4acb2292";
    //加密算法
    $method = "AES-128-CBC";
    //加密向量(要求18个字节)
    $iv = "1234567812345678";
    $encrypt_str = openssl_encrypt($str, $method, $key, 0, $iv);
    var_dump("AES加密结果:".$encrypt_str);
    # AES解密演示
    //$encrypt_str AES加密后产生的密文
    //$key 秘钥(同上)
    $decrypt_str = openssl_decrypt($encrypt_str, $method, $key, 0, $iv);
    var_dump("AES解密结果:".$decrypt_str);

    RSA 加密

    1.公/私钥加密算法,属于非对称加密:

    2.优点:极难被破解;

    3.缺点:速度慢,运算次数多,不适合加密长文本;

    //公钥(项目中可在线生产亦可自己生成)
    $PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApJJ7D/U9lHLNQdl4LZSr
    jNvdCelIraMnSD/iujWxyw/QDLXPCtP06ll42JURGlYaO2DU5c5BKEUF0alyzlE9
    XiHRXPl0LabI/CjGtrIB4RApy1PjkQ31QOt+9R2Nmb7RUkfZwnCWHBlNVnwj4U6J
    woccrlUdElBWU5twFc2PNPbMR6nA/ldUwDpcveNHNp57BrgYfUFcLrjmf2LH6c7X
    ngBNPbG5ha5pmsaXm8MAqBRtAvIwvUsvJLIr+XRc27pCJFe/1MtS4hHhTPE4un/z
    Y/tIrpqm6MimdJcs8oqEQPoztfs5BTNu2jVgrKwtWExDXODWmHemQoaCwzgt3wMy
    3wIDAQAB
    -----END PUBLIC KEY-----";
    //私钥(项目中可在线生产亦可自己生成)
    $PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----
    MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCkknsP9T2Ucs1B
    2XgtlKuM290J6UitoydIP+K6NbHLD9AMtc8K0/TqWXjYlREaVho7YNTlzkEoRQXR
    qXLOUT1eIdFc+XQtpsj8KMa2sgHhECnLU+ORDfVA6371HY2ZvtFSR9nCcJYcGU1W
    fCPhTonChxyuVR0SUFZTm3AVzY809sxHqcD+V1TAOly940c2nnsGuBh9QVwuuOZ/
    YsfpzteeAE09sbmFrmmaxpebwwCoFG0C8jC9Sy8ksiv5dFzbukIkV7/Uy1LiEeFM
    8Ti6f/Nj+0iumqboyKZ0lyzyioRA+jO1+zkFM27aNWCsrC1YTENc4NaYd6ZChoLD
    OC3fAzLfAgMBAAECggEAUcCieW7uREwzQr7xQFNWVQbzavUEMZ2W6gEydCYwSBt2
    0pmOXGamh7QioBSNBnQ3W7/igrZPD94Z4ek3Kt6YiaZrBrC00ejEdt8at6791/vb
    hzIJHgm9B5701nbz3Kg5+5HNzxV2vEalcI0Cle4Z6RSNXtzRMEPQXoAc0ffnZ/tV
    033zAN4nWb9zeLw03/D0nbcpaYA/WbwqsNiTxbbi0s54oTsaOTMBBAK9oH9H2M5J
    506iINcKniyMi6i0cf/cQ+tP6VUCOMHdWm/zJmQ5s2eU/2SowSKMXMLIGUH2Q4AX
    Z2htX4YwvdHGlGA5yPuiMznkFidVcERfbVl9yi54YQKBgQDQYqj2bb0bvD8YuvXx
    htdBQrxiX53pZ1sVoh5SMxD+Lq6tpn4UtOJw6tpE7tgONmWRaKCH10fgX5nQoXPJ
    0Y02qiDyk/TkE0OGiYRTjjkjY3yPkBIz9KRCoIUcwirEfWdzmjFLTq9hiaGo9JXN
    HcLXOgpAbiQe+qXf9x/waWB/hQKBgQDKLQB9Ep9A6UFlumXaEr971A7HcQI2BsfP
    kRfCcT1rphnENHCa37o+5i6tTImAXI+aayp9Jpv0rXLbzFbBkdUdUDINulXSsLRT
    bq3ttbu5c+NG21XW1fvVqf4VYOP7u/l0Z2eBIsg9uLswS3zltTG8ikm+RKhMf1DV
    PDAOoLmMEwKBgDn0po9a9/Rlx5qmLM7OtMFGwUQO2clXYILEwvATmc9HxncvTfOO
    V0gWWTxAvUA+qsLlOXhuTGQ/0nSu4pgnusGQUXeF5N8l6Grbhj0C2itYeQUoiZd/
    m8uX/01/Rwu84O/K25jZOnfDIn3uAFe6xjy7vKwstckT5txCS9S+SgNNAoGAbvLl
    Sr32cUvQXMA+9r7FIHJOLfsBaJ6t9mW8cTNtrm63wym4BfXzImN1iBrxdmTVVbur
    1IRkn5Cz8JUhoxahqnWBEnGIeZgJTaP2hPXvcCV9uzvQzpYdnrKsQhUq59HPYqcA
    cSiiVOTUrPswLmsSQVJuh6Dr7xcLSAnAobZoPMsCgYEAsJuY5RcB1sjYortRNsKb
    KHLiLI93P0MFF46V/343d3BU7TZfETg703Mj2AfOAGTM2p2BkHFri3l+4oigMqpr
    hAp4hNq4KFK2SCjzedrLV7QIgtp/uMZ+q/yhRtiG8kSWlI9c0Un00+KqIwFqfwAB
    l1zOX5QcMa1X7eWSvZ559ko=
    -----END PRIVATE KEY-----";
    //待加密明文
    $data = "这是RSA待加密明文";
    //用于接收加密后的密文
    $content_encrypt = "";
     # 私钥加密
    openssl_private_encrypt($data, $content_encrypt, $PRIVATE_KEY, 1);
    var_dump("私钥加密结果:".$content_encrypt);
     # 公钥解密
    //$content_encrypt 私钥加密后的密文
    //用于接收解密后的明文
    $content_decrypt = "";
    openssl_public_decrypt($content_encrypt, $content_decrypt, $PUBLIC_KEY, 1);
    var_dump("公钥解密结果:".$content_decrypt);

    项目中 API 交互方式之 —- 签名 / 验签

    1. 新建 text.php 文件 —— 生成签名

    //根军 MD5()函数的不可逆性进行签名校验
    //首先必须要有 $appKey与$secretKey
    $appKey = "5d3fb4acb2292";
    $secretKey = "5d3fb4acb22925d3fb4acb22925d3fb4acb2292";
    $url = "localhost/text_sig.php";
    //待传递的参数
    $params['appKey'] = $appKey;
    $params['name'] = "张三";
    $params['age'] = "26";
    $params['sex'] = "男";
    $params['root'] = "admin";
    $params['password'] = "123456";
    $params['time'] = time();
    //获取签名
    $params['sig'] = createSig($params,$secretKey);
    $param_str = http_build_query($params);
    $url = $url.'?'.$param_str;
    var_dump($url);
    //生成签名
    function createSig($params,$secretKey){
        //对参数进行排序
        ksort($params);
        $str = http_build_query($params);
        $str .= $secretKey;
        return md5($str);
    }

    2. 使用 text.php 文件得到的 URL 访问 -> 服务端 text_sig.php 文件 ——- 验证签名

    //获取传值
    $get = $_GET;
    //获取appKey
    $appKey = $get['appKey'];
    //根据appKey获取存储在数据库中对应的secretKey
    $secretKey = "5d3fb4acb22925d3fb4acb22925d3fb4acb2292";
    //判断接口是否过期
    if (abs($get['time'] - time()) > 100){
        die("Time Out");
    }
    //获取签名
    $sig = $get['sig'];
    //将签名从参数中剔除
    unset($get['sig']);
    //对参数进行排序
    ksort($get);
    //将参数数组转为'&'连接的字符串
    $str = http_build_query($get);
    //参数字符串后拼接$secretKey
    $str .= $secretKey;
    //使用MD5加密
    $md5_str = md5($str);
    //将得到的加密后的结果与签名对比
    if ($sig === $md5_str){
        var_dump("验签成功");
    }else{
        var_dump("验签失败");
    }

    注意:以上仅为学习笔记,所以较为简单,不够严谨。

    1.实际项目中须优化使用;

    2.AES 与 RSA 加密方式最好与签名 / 验签配合使用,以防止秘钥在交互过程中被窃听并篡改

    以上就是PHP 数据加密的方法的详细内容,更多请关注爱上源码网其它相关文章!

  • 微信
  • 分享
  • 相关标签:PHP
  • 本文转载于:learnku,如有侵犯,请联系916990011@qq.com删除
    • 上一篇:避坑!用 Docker 搞定 PHP 开发环境搭建
    • 下一篇:php curl发送请求详细教程

    相关文章

    相关视频

    • PHP之十六个魔术方法详解(总结)
    • 怎么修改wordpress的php文件
    • apache和php怎么进行通信
    • php开发环境有哪些
    • PHP 数据加密的方法
    • Thinkphp6.0 源码下载与安装
    • ThinkPHP6.0课程总结
    • ThinkPHP6.0快速预览

    本文有爱上源码下载完入驻作者发布,如果对您版权造成侵害,可以联系本站站长管理进行维权删除,本站收到维权24小时内进行处理,谢谢您关注23ym.cn!
    本站分享大量程序员技术文章以及对编程开发的初级入门教程,包括图文讲解笔记和高清视频下载~

    重要声明:
    1.本站视频教程,软件及网站源码版权均属于原作者所有,您必须在下载后的24个小时之内,从您的电脑中删除!非法商业用途,后果自负!
    2.本站不保证所提供下载资源的安全性和完整性,仅供下载学习之用!如链接失效或资源含外站广告,请联系客服处理!给予奖励!
    3.本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!本站提供有偿服务!如有侵权请联系在线客服!
    4.如您手中有优质资源或教程,可以自助投稿发布,成功分享后有奖励和额外收入!
    5.如您需要正版微擎模块可联系本站客服,我们有价值30w+商业微擎应用出售微擎坑位和招收代理!
    6.400电话/软著/ICP,EDI许可证/商标特价办理中!
    爱上源码下载网 » PHP 数据加密的方法

    常见问题FAQ

    从网站下载的源码都有安装教程么?不会安装怎么办?
    本站发布的网站源码和模板资源大部分在压缩包内都有教程,如您不会安装可以联系本站在线技术进行付费安装。
    爱上源码的所有源码都是亲测能正常运行的么?
    本站目前拥有资源10w+,包含整站源码,网站模板,游戏源码,小程序源码,视频教程,破解软件等,每天也在测试更新;因时间和精力有限我们无法对资源进行一一测试,只能保证所分享资源内容无误,希望理解。
    我手中的优质资源可以在你这换钱或者VIP么?
    爱上源码支持投稿,欢迎发布您手中的优质资源进行售卖;本站VIP支持免费获取,目前邀请10人注册爱上源码即可免费获取VIP。
    爱上源码除了资源分享还有其他业务没?
    【价值30W+微擎模块出售正版商业微擎坑位及招收代理,详情咨询本站客服!】我们团队目前运营并推广几套商业化saas智能小程序系统能满足大部分小程序开发需求,并由SaaS和独立部署版商城小程序系统;另外销售400电话,各种ICP/EDI资质证书办理,软著和商标注册服务等。

    发表评论

    • 19会员总数(位)
    • 33905资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 300稳定运行(天)

    提供最优质的资源集合

    开通VIP 源码下载