各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

PHP数据加密的方法

管理员 2023-09-05
PHP
172

PHP数据加密的方法

内容导读

收集整理的这篇技术教程文章主要介绍了PHP数据加密的方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5504字,纯文字阅读大概需要8分钟

内容图文

环境 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/U9lHLNQdl4LZSrjNvdCelIraMnSD/iujWxyw/QDLXPCtP06ll42JURGlYaO2DU5c5BKEUF0alyzlE9XiHRXPl0LabI/CjGtrIB4RApy1PjkQ31QOt+9R2Nmb7RUkfZwnCWHBlNVnwj4U6JwoccrlUdElBWU5twFc2PNPbMR6nA/ldUwDpcveNHNp57BrgYfUFcLrjmf2LH6c7XngBNPbG5ha5pmsaXm8MAqBRtAvIwvUsvJLIr+XRc27pCJFe/1MtS4hHhTPE4un/zY/tIrpqm6MimdJcs8oqEQPoztfs5BTNu2jVgrKwtWExDXODWmHemQoaCwzgt3wMy3wIDAQAB-----END PUBLIC KEY-----";//私钥(项目中可在线生产亦可自己生成)$PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCkknsP9T2Ucs1B2XgtlKuM290J6UitoydIP+K6NbHLD9AMtc8K0/TqWXjYlREaVho7YNTlzkEoRQXRqXLOUT1eIdFc+XQtpsj8KMa2sgHhECnLU+ORDfVA6371HY2ZvtFSR9nCcJYcGU1WfCPhTonChxyuVR0SUFZTm3AVzY809sxHqcD+V1TAOly940c2nnsGuBh9QVwuuOZ/YsfpzteeAE09sbmFrmmaxpebwwCoFG0C8jC9Sy8ksiv5dFzbukIkV7/Uy1LiEeFM8Ti6f/Nj+0iumqboyKZ0lyzyioRA+jO1+zkFM27aNWCsrC1YTENc4NaYd6ZChoLDOC3fAzLfAgMBAAECggEAUcCieW7uREwzQr7xQFNWVQbzavUEMZ2W6gEydCYwSBt20pmOXGamh7QioBSNBnQ3W7/igrZPD94Z4ek3Kt6YiaZrBrC00ejEdt8at6791/vbhzIJHgm9B5701nbz3Kg5+5HNzxV2vEalcI0Cle4Z6RSNXtzRMEPQXoAc0ffnZ/tV033zAN4nWb9zeLw03/D0nbcpaYA/WbwqsNiTxbbi0s54oTsaOTMBBAK9oH9H2M5J506iINcKniyMi6i0cf/cQ+tP6VUCOMHdWm/zJmQ5s2eU/2SowSKMXMLIGUH2Q4AXZ2htX4YwvdHGlGA5yPuiMznkFidVcERfbVl9yi54YQKBgQDQYqj2bb0bvD8YuvXxhtdBQrxiX53pZ1sVoh5SMxD+Lq6tpn4UtOJw6tpE7tgONmWRaKCH10fgX5nQoXPJ0Y02qiDyk/TkE0OGiYRTjjkjY3yPkBIz9KRCoIUcwirEfWdzmjFLTq9hiaGo9JXNHcLXOgpAbiQe+qXf9x/waWB/hQKBgQDKLQB9Ep9A6UFlumXaEr971A7HcQI2BsfPkRfCcT1rphnENHCa37o+5i6tTImAXI+aayp9Jpv0rXLbzFbBkdUdUDINulXSsLRTbq3ttbu5c+NG21XW1fvVqf4VYOP7u/l0Z2eBIsg9uLswS3zltTG8ikm+RKhMf1DVPDAOoLmMEwKBgDn0po9a9/Rlx5qmLM7OtMFGwUQO2clXYILEwvATmc9HxncvTfOOV0gWWTxAvUA+qsLlOXhuTGQ/0nSu4pgnusGQUXeF5N8l6Grbhj0C2itYeQUoiZd/m8uX/01/Rwu84O/K25jZOnfDIn3uAFe6xjy7vKwstckT5txCS9S+SgNNAoGAbvLlSr32cUvQXMA+9r7FIHJOLfsBaJ6t9mW8cTNtrm63wym4BfXzImN1iBrxdmTVVbur1IRkn5Cz8JUhoxahqnWBEnGIeZgJTaP2hPXvcCV9uzvQzpYdnrKsQhUq59HPYqcAcSiiVOTUrPswLmsSQVJuh6Dr7xcLSAnAobZoPMsCgYEAsJuY5RcB1sjYortRNsKbKHLiLI93P0MFF46V/343d3BU7TZfETg703Mj2AfOAGTM2p2BkHFri3l+4oigMqprhAp4hNq4KFK2SCjzedrLV7QIgtp/uMZ+q/yhRtiG8kSWlI9c0Un00+KqIwFqfwABl1zOX5QcMa1X7eWSvZ559ko=-----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 数据加密的方法的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的PHP数据加密的方法全部内容,希望文章能够帮你解决PHP数据加密的方法所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部