PHP数据加密方式梳理介绍

 更新时间:2022年9月26日 18:04  点击:138 作者:PHP经验分享

前言

首先我们来了解一下为什么要加密?

在网络通信的过程中攻击者可以伪造请求和返回,从而达到不可告人的目的。如下图所示:

数据加密之后可以防止他人监听窃取信息以及通讯内容被篡改。

了解了加密的作用,我再来说说加密的方式:

对称加密DES

DES是1977年美国联邦信息处理标准中采用的一种对称密码。是一种将64比特的明文加密成64比特的密文的对称算法

DES已经被暴力破解了,1999年RSA公司举办的破译DES比赛,耗时仅仅22小时45分钟破译了DES。所以不建议大家使用这种算法进行加密处理

对称加密AES

AES是取代DES而成为新标准的一种对称密码算法。目前为止还未被破译。

接下来我们用PHP来实践一下对称加密吧。

在使用PHP的AES加密需要使用openssl相关函数,该系列函数需要安装openssl扩展。

//获取可用的加密算法
$a = openssl_get_cipher_methods();
print_r($a)
//AES加密解密
$data = 'wo shi aes jiami shuju';//待加密的数据
$key = uniqid();//加密的密钥
$method = 'AES-128-CBC';//加密的方式
$iv = '1234567812345678';//初始化向量,必须是16位字符
$a = openssl_encrypt($data,$method,$key,OPENSSL_RAW_DATA,$iv);
//打印加密结果
print_r($a);
//解密
$d = openssl_decrypt($a,$method,$key,OPENSSL_RAW_DATA,$iv);
//解密后的数据
print_r($d);

非对称加密RSA

AES加密算法目前虽然没有被破解,但是也有一个问题,加密所使用的密钥该怎么去配送呢?如果直接写死在前端就很容易被其他人获取到(一次反编译就可以获取)。

此时就产生了RSA加密算法,不过RSA密码算法也有缺点,运算次数多,不适合加密长文本。

明文内容最长128字节

我们直接来看看PHP实现非对称加密吧

//使用公钥加密,私钥解密
$public_key = "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA14VJBWSyVOI4Q4aV+Cvl
GX4Vb4wczPw0qQbGYAYzfuA7+RpO/X5DG7dFjdBMmb9cHvdWY8+uvKDVuHjbvCpm
3nSTgMbCLm/zDDTH8MUySSaxvm0tbdWm+L1Rinw5LZ+B1J9tHEXMwJZ2g5ZS4OZ0
4xlXx/4GWd9QBuV036er47J/cZ19WPgBDqQ4Mmm2X2na46NCeRenRBXLsaQhxvEe
5pX3WtguQtr+QrcekAmBoI1Xc0xhKDyXZ34rqZNvVCUNn11VzDcffanxlmTFFKDp
QCZLVf8gtSdcxxQQrOfStgLoyYbN1e2Spb/szfQHtbSZ1qHg1frhCvjgOmZ6gDi+
OQIDAQAB
-----END PUBLIC KEY-----";//公钥
$private_key = "-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDXhUkFZLJU4jhD
hpX4K+UZfhVvjBzM/DSpBsZgBjN+4Dv5Gk79fkMbt0WN0EyZv1we91Zjz668oNW4
eNu8KmbedJOAxsIub/MMNMfwxTJJJrG+bS1t1ab4vVGKfDktn4HUn20cRczAlnaD
llLg5nTjGVfH/gZZ31AG5XTfp6vjsn9xnX1Y+AEOpDgyabZfadrjo0J5F6dEFcux
pCHG8R7mlfda2C5C2v5Ctx6QCYGgjVdzTGEoPJdnfiupk29UJQ2fXVXMNx99qfGW
ZMUUoOlAJktV/yC1J1zHFBCs59K2AujJhs3V7ZKlv+zN9Ae1tJnWoeDV+uEK+OA6
ZnqAOL45AgMBAAECggEAEdjMsjCjf9n31MepVZK09wZ02fbdT7A24CRaewsoaoJB
FSCzl9RD1GC51sOABF9PTpUmxz8kdiRPbmY7s/pC6Hr41/odjGDi3IjmYa7CukIF
CALcdzLxD7oFrZUZ2whRZP0KuQOir/QFvmHNXShYV5H6reoANqMCan/HzNmCp2ky
pdtWd+YOFnvwP/m6Xw/mKWN2cFEEdME32Y9fnUq6gCpmgEQLZkEz0XQ53R9Yj6+O
TpYhLzCgox5+HRL+PmE8G3XdVNOhbesmsTX4cS4s5/bWhw/iuZtlSGvNz867p0Ab
jNiouWpoiLM9uHwGURndg+fslLKrBLU0fQeeXYplsQKBgQD3iEDX/Nzo19RZWz6T
gf0r6S7tMtMWQr1InM8fuPxNXsT5QIuddNVp47UMs91F8K5bzGim7+0hM9SnBUsp
/wKw9DRQuELziSdFGyfyo4lDiVvjqvMInph1yLfXaLdz9fxlT5+a8fUFJQqH65w2
SL+ice07mWt7ak/f1bfGKeAuVQKBgQDe5LFNtDKWLxMaO8lVTR0wWziTLImu+E3e
svDIqZszyzqsLnZ4Qu6CXigrXQka8s1LRVF1kf4NQc65uutsFwitfOLitFa/h2wk
5K6Rqwl95QfkuYJpDvU4/IQ21O7HqRBt050QvBrNOfY8MCQUi3fisiP+mOkJS41Z
iVRmQsfsVQKBgCjMinOPOBIg0N1RjsTdXg9IxfVOtUAsC+rV/cWqxdsyzaCPpPN0
+GAVqhfH5abLftGepXkufpVEZ76HvtXTNGxaM+1CEbb2WkSnrzPtBIjfMQgbeydm
jJaNWM/mcKZqWwmP0CzHyKzqaAvzJ7JC12M9B+8U4IRdB4FLRpkg+dRpAoGAJkZz
Q/qrrSqMRzb5DdLeLk2b23oMcqVlCdcEjhDB/BTsEGEyKtijiHOOxlOFmsETC9ft
cxkM3U3tp+s3Pip+bPxDIdcCBoXExlkWuSD70kigIGDSyiOtbInAUoIiNtsLXTC3
igYjPBa1+AP0Tirc/WrFz5SGf/gfX767ZYwWNLkCgYBuHZrIWT0Feg5dJAkF7NMH
1Fes0Gn5sAQVvd9HVG4FAZxqJQa37M3GKD1m4ifBGtaDMgtWyVcMTdsr5hjpJB0G
sEYlg3TDyd096Axr+I7KHDlIzboJjDWDwzwtqkTzgBRlxsClhqW/y/1y1o/QI9Rj
CA7iK/XSPTdstVk5IPL/Aw==
-----END PRIVATE KEY-----";//私钥
$text ='我是待加密的内容';
//公钥加密,参数二$data为加密后的内容
$res = openssl_public_encrypt($text,$encrypt,$public_key);
if($res==false) echo '加密失败';
//私钥解密,参数一:待解密的数据  
//参数二:解密后的明文内容
$res = openssl_private_decrypt($encrypt,$decrypt,$private_key);
if($res==false) echo '解密失败';
echo '解密后的明文数据:'.$decrypt

上面的代码就是PHP实现公钥加密,私钥解密的过程,我们再来看看PHP私钥加密,公钥解密吧

//使用公钥加密,私钥解密
$public_key = "公钥"; 
$private_key = "私钥"; 
$text = "我是待加密的内容";
//公钥加密,参数二$data为加密后的内容
//参数三:私钥
$res = openssl_private_encrypt($text,$encrypt,$private_key);
if($res==false) echo '加密失败';
//私钥解密,参数一:待解密的数据  
//参数二:解密后的明文内容
//参数三:公钥
$res = openssl_public_decrypt($encrypt,$decrypt,$public_key );
if($res==false) echo '解密失败';
echo '解密后的明文数据:'.$decrypt

注意了,前端使用公钥或者私钥进行加密时,一般都会将加密内容转base64h后再传到服务器进行解密。服务器在接收到数据后应该进行base64解析后再进行公钥/私钥进行解密。后端返回给前端时,也应该将加密后的内容转base64格式,方便前端解析。

当然也有一些开发人员会使用urlencode进行url编码再传输给前后端,大家可以根据实际需要进行转码

到此这篇关于PHP数据加密方式梳理介绍的文章就介绍到这了,更多相关PHP数据加密内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

原文出处:https://blog.csdn.net/weixin_39151744/article/details/126966

相关文章

  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
  • php构造方法中析构方法在继承中的表现

    这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • php判断邮箱地址是否存在的方法

    这篇文章主要介绍了php判断邮箱地址是否存在的方法,php判断邮箱地址是否存在的方法有两种,感兴趣的朋友可以参考一下...2016-02-18
  • php switch 与 if else 区别

    在php中switch是选择,if else也有同理,但是它们肯定是有区别的,那么我们来看看它们两者的区别在哪里呢,下面先看switch case语句吧。 switch($id){ case 1: ...2016-11-25
  • 详解PHP的Sodium加密扩展函数

    Sodium 出现的目的也是为了代替Mcrypt这个原来的加密扩展。在 PHP7.2 之后,Mcrypt已经被移除,在PHP7.1时就已经被标记为过时。不过,Sodium扩展的应用也并不是很多,大部分情况下我们都会使用OpenSSL来进行加密操作,所以,我们这篇文章只做了解即可。...2021-06-17
  • thinkphp自定义权限管理之名称判断方法

    下面小编就为大家带来一篇thinkphp自定义权限管理之名称判断方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
  • php图片添加文字水印实现代码

    这篇文章主要为大家详细介绍了php图片添加文字水印实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-03-17
  • php回溯算法计算组合总和的实例代码

    在本篇文章里小编给大家整理的是一篇关于php回溯算法计算组合总和的实例代码,有需要的朋友们可以学习参考下。...2021-07-14
  • PHP再线投票connect.php

    <?php /* **数据库连接 */ $connect = new PDO ("mysql:host=localhost;dbname=online","root","960515"); ?> < PHP (Hypertext...2016-11-25
  • php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法

    这篇文章主要介绍了php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法的相关资料,需要的朋友可以参考下...2016-03-27
  • AS3连接AMFPHP1.9 HELLOWORLD

    随着adobe的FLEX和ROMTING的开源化又引起一场的RIA风波,我作为传统的WEB开发人员被其深深的吸引,作为web开发人员很关注flash如何和后台连接,在网上苦苦寻找终于...2016-11-25