翼度科技»论坛 编程开发 PHP 查看内容

PHP数据加密方式梳理介绍

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
前言

首先我们来了解一下为什么要加密?
在网络通信的过程中攻击者可以伪造请求和返回,从而达到不可告人的目的。如下图所示:

数据加密之后可以防止他人监听窃取信息以及通讯内容被篡改。
了解了加密的作用,我再来说说加密的方式:

对称加密DES

DES是1977年美国联邦信息处理标准中采用的一种对称密码。是一种将64比特的明文加密成64比特的密文的对称算法
DES已经被暴力破解了,1999年RSA公司举办的破译DES比赛,耗时仅仅22小时45分钟破译了DES。所以不建议大家使用这种算法进行加密处理

对称加密AES

AES是取代DES而成为新标准的一种对称密码算法。目前为止还未被破译。
接下来我们用PHP来实践一下对称加密吧。
在使用PHP的AES加密需要使用openssl相关函数,该系列函数需要安装openssl扩展。
  1. //获取可用的加密算法
  2. $a = openssl_get_cipher_methods();
  3. print_r($a)
  4. //AES加密解密
  5. $data = 'wo shi aes jiami shuju';//待加密的数据
  6. $key = uniqid();//加密的密钥
  7. $method = 'AES-128-CBC';//加密的方式
  8. $iv = '1234567812345678';//初始化向量,必须是16位字符
  9. $a = openssl_encrypt($data,$method,$key,OPENSSL_RAW_DATA,$iv);
  10. //打印加密结果
  11. print_r($a);
  12. //解密
  13. $d = openssl_decrypt($a,$method,$key,OPENSSL_RAW_DATA,$iv);
  14. //解密后的数据
  15. print_r($d);
复制代码
非对称加密RSA

AES加密算法目前虽然没有被破解,但是也有一个问题,加密所使用的密钥该怎么去配送呢?如果直接写死在前端就很容易被其他人获取到(一次反编译就可以获取)。
此时就产生了RSA加密算法,不过RSA密码算法也有缺点,运算次数多,不适合加密长文本。
明文内容最长128字节
我们直接来看看PHP实现非对称加密吧
  1. //使用公钥加密,私钥解密
  2. $public_key = "-----BEGIN PUBLIC KEY-----
  3. MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA14VJBWSyVOI4Q4aV+Cvl
  4. GX4Vb4wczPw0qQbGYAYzfuA7+RpO/X5DG7dFjdBMmb9cHvdWY8+uvKDVuHjbvCpm
  5. 3nSTgMbCLm/zDDTH8MUySSaxvm0tbdWm+L1Rinw5LZ+B1J9tHEXMwJZ2g5ZS4OZ0
  6. 4xlXx/4GWd9QBuV036er47J/cZ19WPgBDqQ4Mmm2X2na46NCeRenRBXLsaQhxvEe
  7. 5pX3WtguQtr+QrcekAmBoI1Xc0xhKDyXZ34rqZNvVCUNn11VzDcffanxlmTFFKDp
  8. QCZLVf8gtSdcxxQQrOfStgLoyYbN1e2Spb/szfQHtbSZ1qHg1frhCvjgOmZ6gDi+
  9. OQIDAQAB
  10. -----END PUBLIC KEY-----";//公钥
  11. $private_key = "-----BEGIN PRIVATE KEY-----
  12. MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDXhUkFZLJU4jhD
  13. hpX4K+UZfhVvjBzM/DSpBsZgBjN+4Dv5Gk79fkMbt0WN0EyZv1we91Zjz668oNW4
  14. eNu8KmbedJOAxsIub/MMNMfwxTJJJrG+bS1t1ab4vVGKfDktn4HUn20cRczAlnaD
  15. llLg5nTjGVfH/gZZ31AG5XTfp6vjsn9xnX1Y+AEOpDgyabZfadrjo0J5F6dEFcux
  16. pCHG8R7mlfda2C5C2v5Ctx6QCYGgjVdzTGEoPJdnfiupk29UJQ2fXVXMNx99qfGW
  17. ZMUUoOlAJktV/yC1J1zHFBCs59K2AujJhs3V7ZKlv+zN9Ae1tJnWoeDV+uEK+OA6
  18. ZnqAOL45AgMBAAECggEAEdjMsjCjf9n31MepVZK09wZ02fbdT7A24CRaewsoaoJB
  19. FSCzl9RD1GC51sOABF9PTpUmxz8kdiRPbmY7s/pC6Hr41/odjGDi3IjmYa7CukIF
  20. CALcdzLxD7oFrZUZ2whRZP0KuQOir/QFvmHNXShYV5H6reoANqMCan/HzNmCp2ky
  21. pdtWd+YOFnvwP/m6Xw/mKWN2cFEEdME32Y9fnUq6gCpmgEQLZkEz0XQ53R9Yj6+O
  22. TpYhLzCgox5+HRL+PmE8G3XdVNOhbesmsTX4cS4s5/bWhw/iuZtlSGvNz867p0Ab
  23. jNiouWpoiLM9uHwGURndg+fslLKrBLU0fQeeXYplsQKBgQD3iEDX/Nzo19RZWz6T
  24. gf0r6S7tMtMWQr1InM8fuPxNXsT5QIuddNVp47UMs91F8K5bzGim7+0hM9SnBUsp
  25. /wKw9DRQuELziSdFGyfyo4lDiVvjqvMInph1yLfXaLdz9fxlT5+a8fUFJQqH65w2
  26. SL+ice07mWt7ak/f1bfGKeAuVQKBgQDe5LFNtDKWLxMaO8lVTR0wWziTLImu+E3e
  27. svDIqZszyzqsLnZ4Qu6CXigrXQka8s1LRVF1kf4NQc65uutsFwitfOLitFa/h2wk
  28. 5K6Rqwl95QfkuYJpDvU4/IQ21O7HqRBt050QvBrNOfY8MCQUi3fisiP+mOkJS41Z
  29. iVRmQsfsVQKBgCjMinOPOBIg0N1RjsTdXg9IxfVOtUAsC+rV/cWqxdsyzaCPpPN0
  30. +GAVqhfH5abLftGepXkufpVEZ76HvtXTNGxaM+1CEbb2WkSnrzPtBIjfMQgbeydm
  31. jJaNWM/mcKZqWwmP0CzHyKzqaAvzJ7JC12M9B+8U4IRdB4FLRpkg+dRpAoGAJkZz
  32. Q/qrrSqMRzb5DdLeLk2b23oMcqVlCdcEjhDB/BTsEGEyKtijiHOOxlOFmsETC9ft
  33. cxkM3U3tp+s3Pip+bPxDIdcCBoXExlkWuSD70kigIGDSyiOtbInAUoIiNtsLXTC3
  34. igYjPBa1+AP0Tirc/WrFz5SGf/gfX767ZYwWNLkCgYBuHZrIWT0Feg5dJAkF7NMH
  35. 1Fes0Gn5sAQVvd9HVG4FAZxqJQa37M3GKD1m4ifBGtaDMgtWyVcMTdsr5hjpJB0G
  36. sEYlg3TDyd096Axr+I7KHDlIzboJjDWDwzwtqkTzgBRlxsClhqW/y/1y1o/QI9Rj
  37. CA7iK/XSPTdstVk5IPL/Aw==
  38. -----END PRIVATE KEY-----";//私钥
  39. $text ='我是待加密的内容';
  40. //公钥加密,参数二$data为加密后的内容
  41. $res = openssl_public_encrypt($text,$encrypt,$public_key);
  42. if($res==false) echo '加密失败';
  43. //私钥解密,参数一:待解密的数据  
  44. //参数二:解密后的明文内容
  45. $res = openssl_private_decrypt($encrypt,$decrypt,$private_key);
  46. if($res==false) echo '解密失败';
  47. echo '解密后的明文数据:'.$decrypt
复制代码
上面的代码就是PHP实现公钥加密,私钥解密的过程,我们再来看看PHP私钥加密,公钥解密吧
  1. //使用公钥加密,私钥解密
  2. $public_key = "公钥";
  3. $private_key = "私钥";
  4. $text = "我是待加密的内容";
  5. //公钥加密,参数二$data为加密后的内容
  6. //参数三:私钥
  7. $res = openssl_private_encrypt($text,$encrypt,$private_key);
  8. if($res==false) echo '加密失败';
  9. //私钥解密,参数一:待解密的数据  
  10. //参数二:解密后的明文内容
  11. //参数三:公钥
  12. $res = openssl_public_decrypt($encrypt,$decrypt,$public_key );
  13. if($res==false) echo '解密失败';
  14. echo '解密后的明文数据:'.$decrypt
复制代码
注意了,前端使用公钥或者私钥进行加密时,一般都会将加密内容转base64h后再传到服务器进行解密。服务器在接收到数据后应该进行base64解析后再进行公钥/私钥进行解密。后端返回给前端时,也应该将加密后的内容转base64格式,方便前端解析。
当然也有一些开发人员会使用urlencode进行url编码再传输给前后端,大家可以根据实际需要进行转码
到此这篇关于PHP数据加密方式梳理介绍的文章就介绍到这了,更多相关PHP数据加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/article/263830.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具