首页
📷在线壁纸
🎬娱乐天地
🔖友情链接
更多
📝留言板
Search
1
【javascript】JS-向当前url追加参数
2,345 阅读
2
【PHP】生成随机昵称
2,202 阅读
3
【PHP】判断一个字符串是否属于序列化后的数据
2,024 阅读
4
【css】html+css给文章页,做阅读全文
1,975 阅读
5
【PHP】 设计模式(23种)
1,909 阅读
📂默认分类
💓typecho
🏳️🌈代码改变世界
🍇 mysql
🍈 Winform
🍓 golang
🍉 设计模式
🥝 PHP
🍎 python
🍊 nginx
🍋 网络安全
🍍 javascript
🫑 database
🍡 AI
🍭文艺范
🍏mac
登录
Search
标签搜索
php
typecho
代码注释
redis
mysql
go
golang
nginx
thinkphp
docker
gin
linux
curl
html
mamp
算法
短网址
构造函数
webhook
代码片段
依然范儿特西
累计撰写
145
篇文章
累计收到
1
条评论
首页
栏目
📂默认分类
💓typecho
🏳️🌈代码改变世界
🍇 mysql
🍈 Winform
🍓 golang
🍉 设计模式
🥝 PHP
🍎 python
🍊 nginx
🍋 网络安全
🍍 javascript
🫑 database
🍡 AI
🍭文艺范
🍏mac
页面
📷在线壁纸
🎬娱乐天地
🔖友情链接
📝留言板
搜索到
19
篇与
的结果
2022-12-01
thinkphp3.2 AuthBehavior.class中,使用session无效原因分析
背景在开发中。 创建了一个 AuthBehavior.class 在做全局的权限验证, 里边会读取session, admin_id, 结果是读取失败原因在AuthBehavior.class这个类中,使用session的时候,session_start()还没有执行,所以无法读取;过程分析:关于 behavior 文件加载,程序执行过程大概是这样index.php -> 应用开始(app_begin)标签位侦听并执行绑定行为 -> session启动 -> 控制器开始(action_begin)标签位侦听并执行绑定行为解决办法第一种: 修改tags.php文件'app_begin' => array('Behavior\AuthBehavior'), 修改为 'action_begin' => array('Behavior\AuthBehavior'), 第二种: 偏方:在index.php就启用session_start(); 但是这样有一个问题,就是配置文件里面的那些改变session配置的参数可能及不起作用了(例如session前缀 SESSION_PREFIX) 提示:session函数位置 ThinkPHP\Common\functions.php参考文章:https://www.kancloud.cn/manual/thinkphp/1704
2022年12月01日
33 阅读
0 评论
1 点赞
2022-08-30
php通过各种函数判断0和空
函数对0的判断$cast_id = 0; var_dump(strlen($cast_id)); //1 var_dump(emptyempty($cast_id)); // true var_dump(isset($cast_id)); //true var_dump(is_null($cast_id));//false 对空的判断$cast_id = ""; var_dump(strlen($cast_id)); //0 var_dump(emptyempty($cast_id)); // true var_dump(isset($cast_id)); //true var_dump(is_null($cast_id));//false 补充:下面给大家介绍下php 语法里0不等于null为空的解决办法今天遇到这样一个问题是这样的: php 语句里,我想判断一个值大于等于0. 我是使用 ($value !=null && $value >=0), 返回的结果为空,这点真的好奇怪。实验总结:php 语句如下:$index=0; echo "A: ".$index."<br>"; //0 echo "B: ".($index !=null && $index >=0)."<br>";// echo "C: ".(isset($index) && $index >=0)."<br>";//1 echo "D: ".(0 !=null)."<br>";// 结果:A: 0 B: C: 1 D: 要判断一个数值[该数组可能为空等]大于等于0, 可用另外一个方法: is_numeric($index) === true$index=array_search($url, $contentOtherStr, true); //值大于等于0, 即存在 if(is_numeric($index) === true) { echo "$url existed. "."<br>"; }else{ echo "$url Add. "."<br>"; array_push($contentOtherStr, $url); } 这个很奇怪,终于解决了,Mark 一下。总结:php的语句稍有些怪异,从其它编程语言转来的同学们一定多加小心谨慎,注意惯性思维及语法差异点啊,避免陷入坑中。其它资料:原因是在PHP中变量是以C语言的结构体来存储的,空字符串和NULL,false都是以值为0存储的,其中这个结构体有个zend_uchar type;这样的成员变量,他是用来保存变量的类型的,而空字符串的类型是string,NULL的类型是NULL,false是boolean。这一点可以用 echo gettype('') ;和 echo gettype(NULL) ;来打印看看!而===运算符是不单比较值,还有比较类型的,所以第三个为false!另外再说下,php中= 一个等号是赋值== 两个等号是判断相等且只比较值,不比较类型=== 三个等号是判断值和类型都相等!= 不等于符号,只比较值,不管类型!== 不全等符号,比较值和类型所以 空字符串(''),false, NULL 和 0是值相等而类型不一样!注意:NULL是一种特殊的类型.两种情况下为NULL$var = NULL;$var;3.""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。PHP中区分0和空function test() { $a = 0; $b = ''; $c = null; // 区分 0、''、null // 1、方法一 if ($a !== '') { echo '0和null'; } else { echo '空字符串'; } // 2、方法二 if ($a !== null) { echo '0和空字符串'; } else { echo 'null'; } // 3、方法三 if (strlen($a) > 0) { echo '0'; } else { echo '空字符串和null'; } // 以上三种方法都只能把其中一个和另外两个区分出来,如果需要3个单独区分,需要结合使用 }
2022年08月30日
59 阅读
0 评论
0 点赞
2021-11-12
php防sql注入过滤代码
php防sql注入过滤代码防止sql注入的函数,过滤掉那些非法的字符,提高sql安全性,同时也可以过滤XSS的攻击。function filter($str) { if (empty($str)) return false; $str = htmlspecialchars($str); $str = str_replace( '/', "", $str); $str = str_replace( '"', "", $str); $str = str_replace( '(', "", $str); $str = str_replace( ')', "", $str); $str = str_replace( 'CR', "", $str); $str = str_replace( 'ASCII', "", $str); $str = str_replace( 'ASCII 0x0d', "", $str); $str = str_replace( 'LF', "", $str); $str = str_replace( 'ASCII 0x0a', "", $str); $str = str_replace( ',', "", $str); $str = str_replace( '%', "", $str); $str = str_replace( ';', "", $str); $str = str_replace( 'eval', "", $str); $str = str_replace( 'open', "", $str); $str = str_replace( 'sysopen', "", $str); $str = str_replace( 'system', "", $str); $str = str_replace( '$', "", $str); $str = str_replace( "'", "", $str); $str = str_replace( "'", "", $str); $str = str_replace( 'ASCII 0x08', "", $str); $str = str_replace( '"', "", $str); $str = str_replace( '"', "", $str); $str = str_replace("", "", $str); $str = str_replace(">", "", $str); $str = str_replace("<", "", $str); $str = str_replace("<SCRIPT>", "", $str); $str = str_replace("</SCRIPT>", "", $str); $str = str_replace("<script>", "", $str); $str = str_replace("</script>", "", $str); $str = str_replace("select","",$str); $str = str_replace("join","",$str); $str = str_replace("union","",$str); $str = str_replace("where","",$str); $str = str_replace("insert","",$str); $str = str_replace("delete","",$str); $str = str_replace("update","",$str); $str = str_replace("like","",$str); $str = str_replace("drop","",$str); $str = str_replace("DROP","",$str); $str = str_replace("create","",$str); $str = str_replace("modify","",$str); $str = str_replace("rename","",$str); $str = str_replace("alter","",$str); $str = str_replace("cas","",$str); $str = str_replace("&","",$str); $str = str_replace(">","",$str); $str = str_replace("<","",$str); $str = str_replace(" ",chr(32),$str); $str = str_replace(" ",chr(9),$str); $str = str_replace(" ",chr(9),$str); $str = str_replace("&",chr(34),$str); $str = str_replace("'",chr(39),$str); $str = str_replace("<br />",chr(13),$str); $str = str_replace("''","'",$str); $str = str_replace("css","'",$str); $str = str_replace("CSS","'",$str); $str = str_replace("<!--","",$str); $str = str_replace("convert","",$str); $str = str_replace("md5","",$str); $str = str_replace("passwd","",$str); $str = str_replace("password","",$str); $str = str_replace("../","",$str); $str = str_replace("./","",$str); $str = str_replace("Array","",$str); $str = str_replace("or 1='1'","",$str); $str = str_replace(";set|set&set;","",$str); $str = str_replace("`set|set&set`","",$str); $str = str_replace("--","",$str); $str = str_replace("OR","",$str); $str = str_replace('"',"",$str); $str = str_replace("*","",$str); $str = str_replace("-","",$str); $str = str_replace("+","",$str); $str = str_replace("/","",$str); $str = str_replace("=","",$str); $str = str_replace("'/","",$str); $str = str_replace("-- ","",$str); $str = str_replace(" -- ","",$str); $str = str_replace(" --","",$str); $str = str_replace("(","",$str); $str = str_replace(")","",$str); $str = str_replace("{","",$str); $str = str_replace("}","",$str); $str = str_replace("-1","",$str); $str = str_replace("1","",$str); $str = str_replace(".","",$str); $str = str_replace("response","",$str); $str = str_replace("write","",$str); $str = str_replace("|","",$str); $str = str_replace("`","",$str); $str = str_replace(";","",$str); $str = str_replace("etc","",$str); $str = str_replace("root","",$str); $str = str_replace("//","",$str); $str = str_replace("!=","",$str); $str = str_replace("$","",$str); $str = str_replace("&","",$str); $str = str_replace("&&","",$str); $str = str_replace("==","",$str); $str = str_replace("#","",$str); $str = str_replace("@","",$str); $str = str_replace("mailto:","",$str); $str = str_replace("CHAR","",$str); $str = str_replace("char","",$str); return $str; } 更加简便的防止sql注入的方法(推荐使用这个): if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否为打开 { $post = addslashes($name); // magic_quotes_gpc没有打开的时候把数据过滤 } $name = str_replace("_", "\_", $name); // 把 '_'过滤掉 $name = str_replace("%", "\%", $name); // 把' % '过滤掉 $name = nl2br($name); // 回车转换 $name= htmlspecialchars($name); // html标记转换 return $name; PHP防XSS 防SQL注入的代码/** * 过滤参数 * @param string $str 接受的参数 * @return string */ static public function filterWords($str) { $farr = array( "/<(\\/?)(script|i?frame|style|html|body|title|link|meta|object|\\?|\\%)([^>]*?)>/isU", "/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU", "/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile|dump/is" ); $str = preg_replace($farr,'',$str); return $str; } /** * 过滤接受的参数或者数组,如$_GET,$_POST * @param array|string $arr 接受的参数或者数组 * @return array|string */ static public function filterArr($arr) { if(is_array($arr)){ foreach($arr as $k => $v){ $arr[$k] = self::filterWords($v); } }else{ $arr = self::filterWords($v); } return $arr; } 在防止被注入攻击时,常会用到两个函数:htmlspecialchars()和addslashes() 、trim()函数。这两个函数都是对特殊字符进行转义。1)addslashes()作用及使用addslashes() 通常用于防止sql注入,它可对通过get,post和cookie传递过来的参数的单引号和双引号已经null前加“\”进行转义如:如变量 $str=$_POST["str"];的值为:bb' or 1='1。通过addslashes()函数过滤后会变为:bb\' or 1=\'1;2)htmlspecialchars()作用及使用htmlspecialchars()也是对字符进行转义,与addslashes()不同的是htmlspecialchars()是将特殊字符用引用实体替换。如alert('xss')通过htmlspecialchars()过滤后为alert('xss')</script>3)addslashes()与htmlspecialchars()的区别除了两个函数的转义方式不同外,它们的使用也不同。addslashes()通过用于防止sql语句注入,在执行sql语句前对通过get、post和cookie传递来的参数中的单引号,双引号,\ 和null进行转义。但sql执行成功后,插入到数据库中的数据是不带有转义字符\的。这是如果插入到数据库中的是一些js脚本,当这些脚本被读取出来时还是会被执行。这是我们可对读取出来的数据使用htmlspecialchars()进行过滤,避免执行被注入的脚本。
2021年11月12日
466 阅读
0 评论
2 点赞
2021-11-12
php脚本内存溢出处理
有时候我们跑脚本时候。因为某些原因 内存溢出 导致 脚本停止,但是我们日志又捕捉不到信息,就很蛋疼完整测试代码 class Test { public $name = "sdf"; public function __construct() { } } //写法1,这里内存不会溢出 while(true) { $i++; var_dump($i); $i = new Test(); } //写法2,这里内存不会溢出 while(true) { new Test(); } //写法3,这里内存会溢出 while(true) { $i[] = new Test(); }我们按照这个示例代码来测试test.php 文件class Test{ public $name = "laofan"; public function __construct() { } } try { //这里内存会溢出 while(true) { $i[] = new Test(); } print_r($i); }catch(\Exception $e){ print_r($e->getMessage()); }此处执行 php test.php 控制台会报错,但是无法捕获异常,# 错误信息 Fatal error: Allowed memory size of 2684354560 bytes exhausted (tried to allocate 1073741832 bytes) in D:\phpstudy_pro\WWW_laofan\test.php on line 14改用 linux 日志方式 来解决php test.php > ./log.txtget !
2021年11月12日
135 阅读
0 评论
1 点赞
2021-11-05
日常项目中缓存穿透处理
说起缓存穿透,大家都知道, 真正在使用过程中,很少有人感觉会缓存穿透, 其实在我们日常开发过程中,不知不觉 你就写了个bug , 下边是我们开发中发现的一种缓存穿透写法, 仅供参考:缓存穿透写法 /* 错误写法示例 * * 解读: * * 当 $data_list 查询结果为空时候, 会导致 msgpack_pack 压缩后 存储缓存结果为空 * 从缓存取出数据时候, msgpack_unpack 解压后,数据也是空值,从而导致 一直无法命中缓存, */ public static function getList(){ $cache_key = 'richerdyoung.com:v1'; $redis = new Redis(); $data_list = msgpack_unpack($redis->get($cache_key)); if(empty($data_list)){ $data_list = getListByDb(); $redis->set($cache_key,msgpack_pack($data_list),86400); } return $data_list; } 正确写法 /* 正确写法 * 解读 * * 当取出 不存在的 $cache_key 结果会返回 false ,此时查询db , 如果db返回空,存入 redis * 第二次查询 $cache_key ,缓存key存在,但是结果为空,直接返回, 从而避免 重复查询DB * * 也可以使用 $redis->exists($cache_key) 去判定 */ public static function getAllAdOwnerignoreUserTypeList(){ $cache_key = 'richerdyoung.com:v1'; $redis = new Redis(); $cache_data_list = $redis->get($cache_key); if($cache_data_list === false){ $data_list = getListByDb(); $redis->set($cache_key,msgpack_pack($data_list),86400); }else{ $data_list = msgpack_unpack($cache_data_list); } return $data_list; }
2021年11月05日
189 阅读
3 评论
5 点赞
2021-09-13
mac下为MAMP添加php扩展msgpack
查看最新的扩展版本https://pecl.php.net/package/msgpackPHP7.2.22 的文件夹地址/Applications/MAMP/bin/php/php7.2.22wget -c https://pecl.php.net/get/msgpack-0.0.1.tgz tar zxvf msgpack.tgz cd msgpack /Applications/MAMP/bin/php/php7.2.22/bin/phpize ./configure --with-php-config=/Applications/MAMP/bin/php/php7.2.22/bin/php-config make && make install vi /Applications/MAMP/bin/php/php7.2.22/etc/php.ini #加上一行 extension=msgpack.so # 重启下php # php -m 验证
2021年09月13日
132 阅读
0 评论
2 点赞
2021-09-13
Mac终端采用mamp的PHP版本运行
查看环境变量,PHP运行的文件位置:which php终端输入,可能,bash_profile 文件并不存在,就创建新文件vi ~/.bash_profile然后把环境变量代码添加到bash_profile脚本里export PATH="/Applications/MAMP/bin/php/php7.2.22/bin:$PATH"执行文件,使起生效source ~/.bash_profile
2021年09月13日
130 阅读
0 评论
1 点赞
2021-07-08
TP3.2框架中如何使用多个mysql函数 如FIND_IN_SET 和 !FIND_IN_SET
数据查询中可能会用到数据表中的多个字段去做匹配 可能会用到多个FIND_IN_SET 也可能需要拼接多个条件$user_ids = [1,2,3]; //获取需要匹配的值 if ($user_ids ){ foreach ($user_ids as $val){ $map[] = " FIND_IN_SET($val,show_user_id) "; } } $where['_string'] = implode(" OR ",$map); # 预览sql效果: WHERE FIND_IN_SET('1', show_user_id) OR FIND_IN_SET('2', show_user_id) OR FIND_IN_SET(3, show_user_id) 但是如果我们想除了这个函数还有其他函数要使用的时候并且$where['_string']已经被使用的时候怎么拼接? $where['_logic'] = 'or';//and 或者 OR 就是看你的需要 $map['_string'] = " !FIND_IN_SET(4,show_user_id) "; $where['_complex'] = $map; # 预览sql效果: WHERE FIND_IN_SET('1', show_user_id) OR FIND_IN_SET('2', show_user_id) OR FIND_IN_SET(3, show_user_id) AND ( ( !FIND_IN_SET(4, show_user_id) //就是与FIND_IN_SET相反的意思 ) )
2021年07月08日
180 阅读
0 评论
1 点赞
2021-07-05
【laravel】 操作文件上传
1、获取上传的文件$file=$request->file('file');2、获取上传文件的文件名(带后缀,如abc.png)$filename=$file->getClientOriginalName();3、获取上传文件的后缀(如abc.png,获取到的为png)$fileextension=$file->getClientOriginalExtension();4、获取上传文件的大小$filesize=$file->getClientSize();5、获取缓存在tmp目录下的文件名(带后缀,如php8933.tmp)$filaname=$file->getFilename();6、获取上传的文件缓存在tmp文件夹下的绝对路径$realpath=$file->getRealPath();7、将缓存在tmp目录下的文件移到某个位置,返回的是这个文件移动过后的路径$path=$file->move(path,newname);move()方法有两个参数,第一个参数是文件移到哪个文件夹下的路径,第二个参数是将上传的文件重新命名的文件名8、检测上传的文件是否合法,返回值为true或false$file->isValid()
2021年07月05日
182 阅读
0 评论
0 点赞
2021-06-29
【PHP】RSA非对称加密解密
PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了。举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了。密码没加密,那攻击者就直接拿到了密码,这是最搓的。密码加密了,是不可逆加密,那攻击者只需要模拟那个请求即可登录。密码加密了,是可逆加密,其中携带有时间等参数,后台可以根据时间等参数来判断是否有效,但因为是在前端加密,其加密方式也能在代码中找到,找到加密方式就可以得出解密方式。但是如果我们使用非对称加密就可以避免以上问题。非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。工作过程如下,甲乙之间使用非对称加密的方式完成了重要信息的安全传输。乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。下面我们通过一个例子来说明如何用PHP来实现RSA的加密解密。<?php class Rsa { public $privateKey = ''; public $publicKey = ''; public function __construct() { $resource = openssl_pkey_new(); openssl_pkey_export($resource, $this->privateKey); $detail = openssl_pkey_get_details($resource); $this->publicKey = $detail['key']; } public function publicEncrypt($data, $publicKey) { openssl_public_encrypt($data, $encrypted, $publicKey); return $encrypted; } public function publicDecrypt($data, $publicKey) { openssl_public_decrypt($data, $decrypted, $publicKey); return $decrypted; } public function privateEncrypt($data, $privateKey) { openssl_private_encrypt($data, $encrypted, $privateKey); return $encrypted; } public function privateDecrypt($data, $privateKey) { openssl_private_decrypt($data, $decrypted, $privateKey); return $decrypted; } } $rsa = new Rsa(); echo "公钥:\n", $rsa->publicKey, "\n"; echo "私钥:\n", $rsa->privateKey, "\n"; // 使用公钥加密 $str = $rsa->publicEncrypt('hello', $rsa->publicKey); // 这里使用base64是为了不出现乱码,默认加密出来的值有乱码 $str = base64_encode($str); echo "公钥加密(base64处理过):\n", $str, "\n"; $str = base64_decode($str); $pubstr = $rsa->publicDecrypt($str, $rsa->publicKey); echo "公钥解密:\n", $pubstr, "\n"; $privstr = $rsa->privateDecrypt($str, $rsa->privateKey); echo "私钥解密:\n", $privstr, "\n"; // 使用私钥加密 $str = $rsa->privateEncrypt('world', $rsa->privateKey); // 这里使用base64是为了不出现乱码,默认加密出来的值有乱码 $str = base64_encode($str); echo "私钥加密(base64处理过):\n", $str, "\n"; $str = base64_decode($str); $pubstr = $rsa->publicDecrypt($str, $rsa->publicKey); echo "公钥解密:\n", $pubstr, "\n"; $privstr = $rsa->privateDecrypt($str, $rsa->privateKey); echo "私钥解密:\n", $privstr, "\n"; 大家执行一下可以看到公钥加密的数据,只有私钥能解密,反之亦然,私钥加密的数据只有公钥能解码。这是PHP端的实现,可用在第三方跟平台之间的数据传输,但如果是前端传到后端该怎么办呢,搜索了一下,发现了这个库https://github.com/travist/jsencrypt使用jsencrypt加密解密的例子如下:<!DOCTYPE html> <html> <head> <title>JSEncrypt Example</title> <base id="basetag" href="/jsencrypt-2.3.0/"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="jquery.js"></script> <script type="text/javascript" src="bin/jsencrypt.js"></script> </head> <body> <div class="container"> <script type="text/javascript"> // Call this code when the page is done loading. $(function() { // Run a quick encryption/decryption when they click. $('#testme').click(function() { // Encrypt with the public key... var encrypt = new JSEncrypt(); encrypt.setPublicKey($('#pubkey').val()); var encrypted = encrypt.encrypt($('#input').val()); console.log(encrypted) // Decrypt with the private key... var decrypt = new JSEncrypt(); decrypt.setPrivateKey($('#privkey').val()); var uncrypted = decrypt.decrypt(encrypted); console.log(uncrypted) // Now a simple check to see if the round-trip worked. if (uncrypted == $('#input').val()) { alert('It works!!!'); } else { alert('Something went wrong....'); } }); }); </script> <label for="privkey">Private Key</label><br/> <textarea id="privkey" rows="15" cols="65">-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDkaTKbAERvJGE0 jGsdPXUI1FpO1uDkBkuuQU4LRv0Quw9r8j+fVNkN9rZVXMV7MiGOgb80Z0k9zRxZ 5KWOqMnSlrpyO3WjhFpDJeSmqZ4wLMFwmxrr31AjabD5Nkf9dQ7RiEIuM49g27+M 3OFvdIPcLgCyXnkl8FwBceBs38QbCXY5MrwlZr13yWZnyj6fbbG8t4atAzJ6bnj3 FZuvynC3QnMaVi6YnTIlBOUOHtqt/jsUTOCWkwKqkZh+RZF2fx3IFkSpJAOMgT5p jSnfEJkK5E4JJHobLo/dFO0J7Gve+qb/lfJ9UpnZe78N1TAvbJiNZoN22ghbuIAW M5qqIqOzAgMBAAECggEBAItUJFtqoVQOpADy+s/+UirNpjzbVJmjwXyNN3cnmW0g PjsBrY+aqUCcUwLlMU2B+fg86w6jRokdWgL3t4m7Kkl8SkUuQgc5z/mP3tdPNkB6 vJDc/GIPeYnwidSrKOTSB/UGoiAesYJK6aCaiCV9tIWVxjUH7eyXnvf+qAChyrUW PG/FirLyYmz1yRG99VKKE+iEIzemGSswU0DI0bwTFQ0MunLeJf0EdT20XppNwnl4 uoRgOBpMkW02vxDDWke2YIpk128KFRtPE3zF7W+Prb3ifMuQHSqDdqTgZA5+G3A9 D+lwczy95+0mIBpJ8rKQGjJ51ZT5WVMET9+Hb9+nUIECgYEA9NluRzIi9tZxwQa2 KdU8WAtWZZQZfG18mSFg8/QYrAGF2TyLAW0mEIe7nQXxPzm50HdpxTJCkUrXGm3u hfPayx18H4oVVYRepSSfV+xe7wdogJWV6i5h/LaZsiTk1O8vF9Cwc3yUyVoMtKsg yVcsONOzo/Kg/vwejQJb1C8dNvMCgYEA7tAewjA25vDmfiWZ0lrWKlwGQZ97+pMU X+N12DWxL1Lvi6jBKXlK+Eiz19Qm/mBz9RxrDDY4/o0IjtTxdOh5thDaiqIcnqQn PiBpm7zbheZOlPBGjFJ1vwueIWvqbx9vcqHik/4xHwuFNwQ+YCSpVpVoqrgoN/h/ fX5+hKm1kEECgYEAzn69UZAICtLKNveZE+jBLqPJJnvjjpur1F1hLfzz/cR/BLnZ pcdOrew7Hu+PCTp+6kB7VJLRr0VF6gVCf3gsUta4AsVqvqeXRoF/XSB84+wEh0Ug nNKnUwEQ2DvjPW3G8rfOyGcN+E5YntogGY3KPtbUDvWmL8WjYlrV5Toi0l8CgYAQ Ujr37JGkAOzPzEQSA1FFvdpTm9G+U1T+JK6GI01DvbhPZC4nZnnAND/OTVqI4hCq vNF4GTCV/Q+Lq3QBGG5RCh/Vf7TTBscD0PVGxoZ+RTozpaQ8rNoNP38EK7ru80gL npK8qI+03nWxR+H3cin8l+N6X3GoOZyE+CMvb+XPwQKBgEeDjwTWxVhH/uksO3pw MgbHjauD6AjuW9jc2a7ngFCWSQxQ3+xK1Spn6pbVdLPiBgInxCIl8d6S1yFU0Uan iZHgy4fs1hdJRSuJ6qydqSwlS2C+gDpyY8ye0i+jq5VYYhKcpJCrCgaQGbleuaUd ldp7v1FD8uyeemknGA35f6Id -----END PRIVATE KEY-----</textarea><br/> <label for="pubkey">Public Key</label><br/> <textarea id="pubkey" rows="15" cols="65">-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5GkymwBEbyRhNIxrHT11 CNRaTtbg5AZLrkFOC0b9ELsPa/I/n1TZDfa2VVzFezIhjoG/NGdJPc0cWeSljqjJ 0pa6cjt1o4RaQyXkpqmeMCzBcJsa699QI2mw+TZH/XUO0YhCLjOPYNu/jNzhb3SD 3C4Asl55JfBcAXHgbN/EGwl2OTK8JWa9d8lmZ8o+n22xvLeGrQMyem549xWbr8pw t0JzGlYumJ0yJQTlDh7arf47FEzglpMCqpGYfkWRdn8dyBZEqSQDjIE+aY0p3xCZ CuROCSR6Gy6P3RTtCexr3vqm/5XyfVKZ2Xu/DdUwL2yYjWaDdtoIW7iAFjOaqiKj swIDAQAB -----END PUBLIC KEY-----</textarea><br/> <label for="input">Text to encrypt:</label><br/> <textarea id="input" name="input" type="text" rows=4 cols=70>This is a test!</textarea><br/> <input id="testme" type="button" value="Test Me!!!" /><br/> </div> </body> </html>其中的公钥和私钥都是上面PHP代码中生成的,这边好像只有公钥加密,私钥解密。拿到其中打印出的加密后的数据,尝试在PHP中进行解密,可以看到也能解密成功。代码如下:<?php class Rsa { public $privateKey = '-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDkaTKbAERvJGE0 jGsdPXUI1FpO1uDkBkuuQU4LRv0Quw9r8j+fVNkN9rZVXMV7MiGOgb80Z0k9zRxZ 5KWOqMnSlrpyO3WjhFpDJeSmqZ4wLMFwmxrr31AjabD5Nkf9dQ7RiEIuM49g27+M 3OFvdIPcLgCyXnkl8FwBceBs38QbCXY5MrwlZr13yWZnyj6fbbG8t4atAzJ6bnj3 FZuvynC3QnMaVi6YnTIlBOUOHtqt/jsUTOCWkwKqkZh+RZF2fx3IFkSpJAOMgT5p jSnfEJkK5E4JJHobLo/dFO0J7Gve+qb/lfJ9UpnZe78N1TAvbJiNZoN22ghbuIAW M5qqIqOzAgMBAAECggEBAItUJFtqoVQOpADy+s/+UirNpjzbVJmjwXyNN3cnmW0g PjsBrY+aqUCcUwLlMU2B+fg86w6jRokdWgL3t4m7Kkl8SkUuQgc5z/mP3tdPNkB6 vJDc/GIPeYnwidSrKOTSB/UGoiAesYJK6aCaiCV9tIWVxjUH7eyXnvf+qAChyrUW PG/FirLyYmz1yRG99VKKE+iEIzemGSswU0DI0bwTFQ0MunLeJf0EdT20XppNwnl4 uoRgOBpMkW02vxDDWke2YIpk128KFRtPE3zF7W+Prb3ifMuQHSqDdqTgZA5+G3A9 D+lwczy95+0mIBpJ8rKQGjJ51ZT5WVMET9+Hb9+nUIECgYEA9NluRzIi9tZxwQa2 KdU8WAtWZZQZfG18mSFg8/QYrAGF2TyLAW0mEIe7nQXxPzm50HdpxTJCkUrXGm3u hfPayx18H4oVVYRepSSfV+xe7wdogJWV6i5h/LaZsiTk1O8vF9Cwc3yUyVoMtKsg yVcsONOzo/Kg/vwejQJb1C8dNvMCgYEA7tAewjA25vDmfiWZ0lrWKlwGQZ97+pMU X+N12DWxL1Lvi6jBKXlK+Eiz19Qm/mBz9RxrDDY4/o0IjtTxdOh5thDaiqIcnqQn PiBpm7zbheZOlPBGjFJ1vwueIWvqbx9vcqHik/4xHwuFNwQ+YCSpVpVoqrgoN/h/ fX5+hKm1kEECgYEAzn69UZAICtLKNveZE+jBLqPJJnvjjpur1F1hLfzz/cR/BLnZ pcdOrew7Hu+PCTp+6kB7VJLRr0VF6gVCf3gsUta4AsVqvqeXRoF/XSB84+wEh0Ug nNKnUwEQ2DvjPW3G8rfOyGcN+E5YntogGY3KPtbUDvWmL8WjYlrV5Toi0l8CgYAQ Ujr37JGkAOzPzEQSA1FFvdpTm9G+U1T+JK6GI01DvbhPZC4nZnnAND/OTVqI4hCq vNF4GTCV/Q+Lq3QBGG5RCh/Vf7TTBscD0PVGxoZ+RTozpaQ8rNoNP38EK7ru80gL npK8qI+03nWxR+H3cin8l+N6X3GoOZyE+CMvb+XPwQKBgEeDjwTWxVhH/uksO3pw MgbHjauD6AjuW9jc2a7ngFCWSQxQ3+xK1Spn6pbVdLPiBgInxCIl8d6S1yFU0Uan iZHgy4fs1hdJRSuJ6qydqSwlS2C+gDpyY8ye0i+jq5VYYhKcpJCrCgaQGbleuaUd ldp7v1FD8uyeemknGA35f6Id -----END PRIVATE KEY-----'; public $publicKey = '-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5GkymwBEbyRhNIxrHT11 CNRaTtbg5AZLrkFOC0b9ELsPa/I/n1TZDfa2VVzFezIhjoG/NGdJPc0cWeSljqjJ 0pa6cjt1o4RaQyXkpqmeMCzBcJsa699QI2mw+TZH/XUO0YhCLjOPYNu/jNzhb3SD 3C4Asl55JfBcAXHgbN/EGwl2OTK8JWa9d8lmZ8o+n22xvLeGrQMyem549xWbr8pw t0JzGlYumJ0yJQTlDh7arf47FEzglpMCqpGYfkWRdn8dyBZEqSQDjIE+aY0p3xCZ CuROCSR6Gy6P3RTtCexr3vqm/5XyfVKZ2Xu/DdUwL2yYjWaDdtoIW7iAFjOaqiKj swIDAQAB -----END PUBLIC KEY-----'; public function __construct() { } public function publicEncrypt($data, $publicKey) { openssl_public_encrypt($data, $encrypted, $publicKey); return $encrypted; } public function publicDecrypt($data, $publicKey) { openssl_public_decrypt($data, $decrypted, $publicKey); return $decrypted; } public function privateEncrypt($data, $privateKey) { openssl_private_encrypt($data, $encrypted, $privateKey); return $encrypted; } public function privateDecrypt($data, $privateKey) { openssl_private_decrypt($data, $decrypted, $privateKey); return $decrypted; } } $rsa = new Rsa(); // 使用公钥加密的内容 $str = 'IUMBGcLwJECdxUu3LMbeEhGQdoRjCLqFwfZQBO/Odh3tClbq76Tva7yYqTVxexXLmZ3uY8DrOk/XwcVVRr6g9rBnv/zxBxUShCdN0CwkoguvI+6Oju2aUBlM4FhUp+gmasa5YfqylEp1RpsVAp67GMGlxZvp0ekfhFXkjSqAguPd7dKq5YjftP12xOyuJHAzzg7U+eHxffxnneKqXkK7QrfQD6VrLpbYmayPSjMza/RbjXF+d85UeUZUaF25PZ7Y7kD4Yo7/hY/L6peeOkI5//tpl6U4QY9VsFsjAbIpNMsZuNjE/cZ57Kc5WScPsmy0o9wsp5DUEJmu+YYmr6adoA=='; $str = base64_decode($str); $pubstr = $rsa->publicDecrypt($str, $rsa->publicKey); echo "公钥解密:\n", $pubstr, "\n"; $privstr = $rsa->privateDecrypt($str, $rsa->privateKey); echo "私钥解密:\n", $privstr, "\n"; 参考资料百度百科:非对称加密: https://baike.baidu.com/item/%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86/9874417?fr=aladdinphp加密扩展: https://www.php.net/manual/zh/book.openssl.php
2021年06月29日
231 阅读
0 评论
1 点赞
1
2