Welcom to 评论 - lizhenqiu blog!
#1711
#1712
date_default_timezone_set("Asia/Shanghai"); $time = intval (date("Hi")); if ($time > "800" && $time < "1130") { // code }
#1713
#1714
#1715
#1716
#1717
#1718
#1719
#1720
#1721
#1722
#1723
#1724
Name: Commercial ===== LICENSE BEGIN ===== 31157-D26597T 000017kWYG!tV2QVTV!fYKEYiETkfp uYMMmhsTePgthVutczCX4PF0EoHAP7 JYFri32V7hdQkpwJJBgc!lK!o01BOQ ===== LICENSE END ===== Name: OpenSource ===== LICENSE BEGIN ===== 95392-D27147T 00001mG6Lc9YBCATnMFu8EmPzMYqp7 NbTh7xIVABQpVozg0H7GxjSfBtt6f4 RO!bY4fBptyzOAfONsSc78LD!szjcN ===== LICENSE END ===== Name: Educational ===== LICENSE BEGIN ===== 79489-D13780T 00000WevhuSZasfcIHRF8ne1li!gri 5pwr!"ttRDkYTk1IuWgsjyf7WJXLio C47FZxcRcXFHn1XinQ"SldW1lUMr0q ===== LICENSE END ===== Name: Non Commercial ===== LICENSE BEGIN ===== 84788-D22401T 00002ICm3tscFjOI!6D9N6"rlQzY"S hKziDw7jv6nCn4pGY9DeKPt5k8yOVM GbHMoZhfQ"TstQu!LkJmc7BEArnwAQ ===== LICENSE END ===== Name: Site ===== LICENSE BEGIN ===== 79150-D76780T 00000MuB"Ak8tisq3UyV9q2w"kxGn2 WJRSxP4dyKklfPJLfPCByGsgU24kQu ihxpp!!G4VP3XwmhmNbAWQc0xqkK3M ===== LICENSE END ===== Name: Personal ===== LICENSE BEGIN ===== 48363-D36754T 00001Wv2qgaIOgpXEMGjgvtpxGz!M4 8QYCugxdmCGiWEHsqSfeSzyD4oNil! oyK6rzpjhx"ykmcI4DUevGCVa!CXyx ===== LICENSE END =====
#1725
#1726
Y-m-d H:i:s
#1727
ini_set('date.timezone','Asia/Shanghai');
1、修改php.ini,在php.ini中找到data.timezone =去掉它前面的;号,然后设置data.timezone = “Asia/Shanghai”;即可。 2、在程序PHP 5以上版本的程序代码中使用函数ini_set('date.timezone','Asia/Shanghai');或者date_default_timezone_set(‘Asia/Shanghai'); 一些常用的时区标识符说明: Asia/Shanghai – 上海 Asia/Chongqing – 重庆 Asia/Urumqi – 乌鲁木齐 Asia/Hong_Kong – 香港 Asia/Macao – 澳门 Asia/Taipei – 台北 Asia/Singapore – 新加坡
<?php function_exists(date_default_timezone_set);//在这他总是返回1,这函数是判断这里面的字符是不是一个定义了的函数名 date_default_timezone_set("Etc/GMT");//这是格林威治标准时间,得到的时间和默认时区是一样的 date_default_timezone_set("Etc/GMT+8");//这里比林威治标准时间慢8小时 date_default_timezone_set("Etc/GMT-8");//这里比林威治标准时间快8小时 date_default_timezone_set('PRC'); //设置中国时区 ?>
#1728
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; // 密匙 $key = md5($key ? $key : $GLOBALS['discuz_auth_key']); // 密匙a会参与加解密 $keya = md5(substr($key, 0, 16)); // 密匙b会用来做数据完整性验证 $keyb = md5(substr($key, 16, 16)); // 密匙c用于变化生成的密文 $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; // 参与运算的密匙 $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b), //解密时会通过这个密匙验证数据完整性 // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); // 产生密匙簿 for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } // 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度 for($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } // 核心加解密部分 for($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; // 从密匙簿得出密匙进行异或,再转成字符 $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if($operation == 'DECODE') { // 验证数据有效性,请看未加密明文的格式 if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因 // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码 return $keyc.str_replace('=', '', base64_encode($result)); } }
$str = 'abcdef'; $key = 'www.fyunw.com'; $authcode = authcode($str,'ENCODE',$key,0); //加密 echo $authcode; echo authcode($authcode,'DECODE',$key,0); //解密
function encrypt($string,$operation,$key=''){ $key=md5($key); $key_length=strlen($key); $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; $string_length=strlen($string); $rndkey=$box=array(); $result=''; for($i=0;$i<=255;$i++){ $rndkey[$i]=ord($key[$i%$key_length]); $box[$i]=$i; } for($j=$i=0;$i<256;$i++){ $j=($j+$box[$i]+$rndkey[$i])%256; $tmp=$box[$i]; $box[$i]=$box[$j]; $box[$j]=$tmp; } for($a=$j=$i=0;$i<$string_length;$i++){ $a=($a+1)%256; $j=($j+$box[$a])%256; $tmp=$box[$a]; $box[$a]=$box[$j]; $box[$j]=$tmp; $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256])); } if($operation=='D'){ if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){ return substr($result,8); }else{ return''; } }else{ return str_replace('=','',base64_encode($result)); } }
$str = 'abc'; $key = 'www.fyunw.com'; $token = encrypt($str, 'E', $key); echo '加密:'.encrypt($str, 'E', $key); echo '解密:'.encrypt($str, 'D', $key);
#1729
function encrypt($data, $key) { $key = md5($key); $x = 0; $len = strlen($data); $l = strlen($key); for ($i = 0; $i < $len; $i++) { if ($x == $l) { $x = 0; } $char .= $key{$x}; $x++; } for ($i = 0; $i < $len; $i++) { $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256); } return base64_encode($str); }
function decrypt($data, $key) { $key = md5($key); $x = 0; $data = base64_decode($data); $len = strlen($data); $l = strlen($key); for ($i = 0; $i < $len; $i++) { if ($x == $l) { $x = 0; } $char .= substr($key, $x, 1); $x++; } for ($i = 0; $i < $len; $i++) { if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) { $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1))); } else { $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1))); } } return $str; }
$data = 'PHP加密解密算法'; // 被加密信息 $key = '123'; // 密钥 $encrypt = encrypt($data, $key); $decrypt = decrypt($encrypt, $key); echo $encrypt, "\n", $decrypt;
确定要清除编辑框内容吗?
该删除操作将不可恢复。
删除 取消
激活Windows
转到"设置"以激活Windows。
#1711
#1712
date_default_timezone_set("Asia/Shanghai"); $time = intval (date("Hi")); if ($time > "800" && $time < "1130") { // code }
#1713
在线练习
在线编程面试
数据结构
算法
贪心算法
位运算
复杂度分析
视频教程
面试宝典
计算机科学资讯
文件结构
在线练习
LeetCode
Virtual Judge
CareerCup
HackerRank
CodeFights
Kattis
HackerEarth
Codility
Code Forces
Code Chef
Sphere Online Judge – SPOJ
在线编程面试
Gainlo
Refdash
#1714
#1715
#1716
#1717
01. screenr.com —— 将你在电脑上的操作录制成影片并直接传送到YouTube上。
02. bounceapp.com —— 能够将一个网页进行完整的截图。
03. goo.gl —— 将网站地址进行缩写并可以将网址转换成二维码。
04. untiny.me —— 找到缩写网址的原始域名。
05. localti.me —— 能查询不只一个城市的当地时间。
06. copypastecharacter.com —— 复制你键盘上没有的特殊字符。
07. topsy.com —— Twitter专用搜索引擎。
08. fb.me/AppStore —— 无需运行iTunes就可以搜索iOS的手机应用。
09. iconfinder.com ——在这里可以找到图标的所有尺寸。
10. office.com —— 下载办公文件的模板、剪贴画以及图片。
11. woorank.com —— 你想知道的关于一个网站的所有信息都可以在这里找到。
12. virustotal.com —— 对任何可疑的文件或者邮件附件进行病毒扫描。
13. wolframalpha.com —— 不用搜索就可以知道问题的答案 —— 更多信息,请阅读Wolfram提示。
14. printwhatyoulike.com —— 完整的打印网页。
15. joliprint.com —— 将新闻和博客内容重新整合为报纸。
16. isnsfw.com —— 当你想要分享18X网页时为你做警示标记。
17. e.ggtimer.com —— 一个居家常备的简易在线计时器。
18. coralcdn.org —— 如果某网站由于服务器太繁忙而无法访问的话,试试通过CDN来进入网站吧。
19. random.org —— 帮你随机挑选数字,抛硬币~
20. mywot.com —— 测试任意网站的可信任指数。
21. viewer.zoho.com —— 帮你用浏览器来预览PDF文件和PPT。
22. tubemogul.com —— 能同时向多个视频网站上传视频。
23. truveo.com —— 最佳网络视频搜索。
24. scr.im —— 不用担心垃圾邮件困扰,安全无忧地分享你的邮件地址。
25. spypig.com —— 从今往后在你的邮箱里查看收据吧~
26. sizeasy.com —— 将任一产品进行视觉化并进行尺寸比较。
27. whatfontis.com —— 迅速通过图片来确定字体名称。
28. fontsquirrel.com —— 优质的字体大集合 —— 免费自用与商用。
29. regex.info —— 查出你照片中的隐藏数据
30. tineye.com —— 就像谷歌图片搜索应用的网页版。
31. iwantmyname.com —— 帮助你在所有TLD中找到你想要的域名。
32. tabbloid.com —— 将你最喜欢的博客转换成PDF
33. join.me —— 与网络上任何一个人分享你的桌面。
34. onlineocr.net —— 从扫描的PDF和图片中识别出其他文字
35. flightstats.com —— 随时查看世界各地机场的航班实况。
36. wetransfer.com —— 用来在线分享大型文件。
37. pastebin.com —— 一个临时的在线剪切板,方便你的文字编辑与记录编码片段。
38. polishmywriting.com —— 检查你文字中的拼写和语法错误。
39. awesomehighlighter.com —— 轻松标记网页中的重点部分。
40. typewith.me —— 与多人同时在一个文件上进行修改。
41. whichdateworks.com —— 正在计划什么活动吗?选一个合适的日期吧。
42. everytimezone.com —— 清晰易懂的世界时区表。
43. warrick.cs.odu.edu —— 当你收藏的网页被删除时,你就需要用到这个了。
44. gtmetrix.com —— 一个完美的在线工具,可以帮助你计算网页性能。
45. imo.im —— 可以在一个网页上使用多个聊天工具,Skype, Google Talk,等等。
46. translate.google.com —— 翻译网页、PDF以及办公文档。
47. youtube.com/leanback —— 享受无尽头的全屏Youtube视频吧。
48. similarsites.com —— 帮你发现与你喜欢的网站类似的其他网站。
49. wordle.net —— 使用标签云图快速总结长篇文字。
50. bubbl.us —— 用浏览器来做思维导图和头脑风暴。
51. kuler.adobe.com —— 获取配色的灵感,也可以从照片中提取颜色。
52. followupthen.com —— 通过邮件设置快速提醒。
53. lmgtfy.com —— 当你的朋友懒到不愿意自己用谷歌搜索时……
54. tempalias.com —— 临时邮箱用户名生成器,比一次性邮箱实用。
55. pdfescape.com —— 使用浏览器快速修改PDF文件。
56. faxzero.com —— 免费发送在线传真 —— 参加其他传真服务。
57. feedmyinbox.com —— 将RSS更新以邮件新闻的方式发送给你。
58. isendr.com —— 无需上传到服务器就可以传送文件。
59. tinychat.com —— 快速创建一个私人聊天室。
60. privnote.com —— 创建一个在阅读过后会自行毁灭的便条。
61. flightaware.com —— 实况转播世界各地机场航班动态。
62. boxoh.com —— 在谷歌地图上追踪任何运输信息。
63. chipin.com —— 当你需要为一个项目或者活动进行筹款时……
64. downforeveryoneorjustme.com —— 查出你的喜欢的网站是否下线了。
65. example.com —— 这个网站可以当做文档的范例来使用。
66. whoishostingthis.com —— 找到任何一个网站的网站主机。
67. google.com/history —— 是不是忘记曾经搜索过的某些关键词?用这个网站来找回吧。
68. errorlevelanalysis.com —— 辨识一张照片是否被PS过。
69. google.com/dictionary —— 查出一个单词的含义、发音以及例句用法。
70. urbandictionary.com —— 告诉你俚语和俗语的含义。
71. seatguru.com —— 在你为下一次航班选择座位时参考一下这个网站吧。
72. sxc.hu —— 免费下载库存图片。
73. imo.im —— 可以同时使用多个聊天工具跟朋友聊天,Skype, Google Talk,等等。
74. wobzip.org —— 在线解压压缩文件。
75. vocaroo.com —— 只需轻轻一点就可以记录下自己的声音。
76. scribblemaps.com —— 轻松创建自定义谷歌地图。
77. buzzfeed.com —— 绝不让你错过任何网络走红图片或视频。
78. alertful.com —— 快速设定重大日程的邮件提醒。
79. encrypted.google.com —— 防止网络供应商或者你的老板查看你的搜索记录。
80. formspring.me —— 你可以在这里提出和回答私人问题。
81. snopes.com —— 查出你收到的邮件是真实的或是诈骗邮件。
82. typingweb.com —— 通过这些练习环节变成打字大师吧。
83. mailvu.com —— 通过你的摄像头给其他人发送视频邮件吧。
84. ge.tt —— 神速传送文件,接收的人还可以在下载前进行预览哦。
85. timerime.com —— 使用音频、视频和图片来创建时间表。
86. stupeflix.com —— 利用自己的图片、录音和视频来制作一部小电影吧。
87. aviary.com/myna —— 一个能够编辑录音和混音的在线音频编辑器。
88. noteflight.com —— 打印五线谱,在线创作自己的音乐。
89. disposablewebpage.com —— 创建一个会自动销毁的临时网站。
90. namemytune.com —— 当你想知道这段旋律的名字时……
91. homestyler.com —— 从零开始进行室内设计,或者重新为你的家建模。
92. snapask.com —— 在手机上通过邮件查询球赛分数,或者查阅维基百科。
93. teuxdeux.com —— 长得像手写日记的日程应用。
94. livestream.com —— 在线直播任何活动和项目,包括你的电脑桌面。
95. bing.com/images —— 自动为你的移动设备找到合适的壁纸。
96. historio.us —— 将任何格式的网页完整保存。
97. dabbleboard.com —— 你的虚拟白板。
98. whisperbot.com —— 不需要使用自己的邮箱账户就可以发送邮件。
99. sumopaint.com —— 一个超棒的在线图片编辑器(图层编辑方式)。
100. lovelycharts.com —— 在线创建流程图、网络图表、网站地图等。
101. nutshellmail.com ——在你的收件箱中获取Facebook与Twitter最新消息。
#1718
#1719
#1720
原始网站: epic.com
钓鱼网站: epic.com
打开后看地址栏,你觉得你能分辨的出来么?
#1721
#1722
#1723
男人:老婆因强拆喝了农药!
医生:吐出来就好。
男人:办法都用完了,灌大便水,她不吐,灌的人却吐了。
医生听完,靠近妇女的耳朵说:
利为民所谋!(女有点反应),
情为民所系!(女有点抽搐),
立裆为公!(女发出恶心的声音),
执政为民!(女捂住嘴巴),
以人为本!(女翻了个身全部吐出来了)
男人激动地说:是裆救了我们啊!
#1724
Name: Commercial ===== LICENSE BEGIN ===== 31157-D26597T 000017kWYG!tV2QVTV!fYKEYiETkfp uYMMmhsTePgthVutczCX4PF0EoHAP7 JYFri32V7hdQkpwJJBgc!lK!o01BOQ ===== LICENSE END ===== Name: OpenSource ===== LICENSE BEGIN ===== 95392-D27147T 00001mG6Lc9YBCATnMFu8EmPzMYqp7 NbTh7xIVABQpVozg0H7GxjSfBtt6f4 RO!bY4fBptyzOAfONsSc78LD!szjcN ===== LICENSE END ===== Name: Educational ===== LICENSE BEGIN ===== 79489-D13780T 00000WevhuSZasfcIHRF8ne1li!gri 5pwr!"ttRDkYTk1IuWgsjyf7WJXLio C47FZxcRcXFHn1XinQ"SldW1lUMr0q ===== LICENSE END ===== Name: Non Commercial ===== LICENSE BEGIN ===== 84788-D22401T 00002ICm3tscFjOI!6D9N6"rlQzY"S hKziDw7jv6nCn4pGY9DeKPt5k8yOVM GbHMoZhfQ"TstQu!LkJmc7BEArnwAQ ===== LICENSE END ===== Name: Site ===== LICENSE BEGIN ===== 79150-D76780T 00000MuB"Ak8tisq3UyV9q2w"kxGn2 WJRSxP4dyKklfPJLfPCByGsgU24kQu ihxpp!!G4VP3XwmhmNbAWQc0xqkK3M ===== LICENSE END ===== Name: Personal ===== LICENSE BEGIN ===== 48363-D36754T 00001Wv2qgaIOgpXEMGjgvtpxGz!M4 8QYCugxdmCGiWEHsqSfeSzyD4oNil! oyK6rzpjhx"ykmcI4DUevGCVa!CXyx ===== LICENSE END =====
#1725
#1726
Y-m-d H:i:s
#1727
ini_set('date.timezone','Asia/Shanghai');
1、修改php.ini,在php.ini中找到data.timezone =去掉它前面的;号,然后设置data.timezone = “Asia/Shanghai”;即可。 2、在程序PHP 5以上版本的程序代码中使用函数ini_set('date.timezone','Asia/Shanghai');或者date_default_timezone_set(‘Asia/Shanghai'); 一些常用的时区标识符说明: Asia/Shanghai – 上海 Asia/Chongqing – 重庆 Asia/Urumqi – 乌鲁木齐 Asia/Hong_Kong – 香港 Asia/Macao – 澳门 Asia/Taipei – 台北 Asia/Singapore – 新加坡
<?php function_exists(date_default_timezone_set);//在这他总是返回1,这函数是判断这里面的字符是不是一个定义了的函数名 date_default_timezone_set("Etc/GMT");//这是格林威治标准时间,得到的时间和默认时区是一样的 date_default_timezone_set("Etc/GMT+8");//这里比林威治标准时间慢8小时 date_default_timezone_set("Etc/GMT-8");//这里比林威治标准时间快8小时 date_default_timezone_set('PRC'); //设置中国时区 ?>
#1728
项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。
最常见的应用在用户登录以及一些API数据交换的场景。
最常见的应用在用户登录以及一些API数据交换的场景。
笔者收录了一些比较经典的PHP加密解密函数代码,分享给大家。加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果。
1、非常给力的authcode加密函数,Discuz!经典代码(带详解):
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; // 密匙 $key = md5($key ? $key : $GLOBALS['discuz_auth_key']); // 密匙a会参与加解密 $keya = md5(substr($key, 0, 16)); // 密匙b会用来做数据完整性验证 $keyb = md5(substr($key, 16, 16)); // 密匙c用于变化生成的密文 $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; // 参与运算的密匙 $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b), //解密时会通过这个密匙验证数据完整性 // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); // 产生密匙簿 for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } // 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度 for($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } // 核心加解密部分 for($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; // 从密匙簿得出密匙进行异或,再转成字符 $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if($operation == 'DECODE') { // 验证数据有效性,请看未加密明文的格式 if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因 // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码 return $keyc.str_replace('=', '', base64_encode($result)); } }
函数authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE表示解密,其它表示加密;$key:密匙;$expiry:密文有效期。
用法:
$str = 'abcdef'; $key = 'www.fyunw.com'; $authcode = authcode($str,'ENCODE',$key,0); //加密 echo $authcode; echo authcode($authcode,'DECODE',$key,0); //解密
2、加解密函数encrypt():
function encrypt($string,$operation,$key=''){ $key=md5($key); $key_length=strlen($key); $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; $string_length=strlen($string); $rndkey=$box=array(); $result=''; for($i=0;$i<=255;$i++){ $rndkey[$i]=ord($key[$i%$key_length]); $box[$i]=$i; } for($j=$i=0;$i<256;$i++){ $j=($j+$box[$i]+$rndkey[$i])%256; $tmp=$box[$i]; $box[$i]=$box[$j]; $box[$j]=$tmp; } for($a=$j=$i=0;$i<$string_length;$i++){ $a=($a+1)%256; $j=($j+$box[$a])%256; $tmp=$box[$a]; $box[$a]=$box[$j]; $box[$j]=$tmp; $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256])); } if($operation=='D'){ if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){ return substr($result,8); }else{ return''; } }else{ return str_replace('=','',base64_encode($result)); } }
函数encrypt($string,$operation,$key)中$string:需要加密解密的字符串;$operation:判断是加密还是解密,E表示加密,D表示解密;$key:密匙。
用法:
$str = 'abc'; $key = 'www.fyunw.com'; $token = encrypt($str, 'E', $key); echo '加密:'.encrypt($str, 'E', $key); echo '解密:'.encrypt($str, 'D', $key);
#1729
对于大部分密码加密,我们可以采用md5、sha1等方法。可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密。
对于需要还原的信息,则需要采用可逆的加密解密算法。
下面一组PHP函数是实现此加密解密的方法:
加密算法如下:
function encrypt($data, $key) { $key = md5($key); $x = 0; $len = strlen($data); $l = strlen($key); for ($i = 0; $i < $len; $i++) { if ($x == $l) { $x = 0; } $char .= $key{$x}; $x++; } for ($i = 0; $i < $len; $i++) { $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256); } return base64_encode($str); }
解密算法如下:
function decrypt($data, $key) { $key = md5($key); $x = 0; $data = base64_decode($data); $len = strlen($data); $l = strlen($key); for ($i = 0; $i < $len; $i++) { if ($x == $l) { $x = 0; } $char .= substr($key, $x, 1); $x++; } for ($i = 0; $i < $len; $i++) { if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) { $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1))); } else { $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1))); } } return $str; }
上述加密解密的过程均需要用到一个加密密钥(即参数$key)。
$data = 'PHP加密解密算法'; // 被加密信息 $key = '123'; // 密钥 $encrypt = encrypt($data, $key); $decrypt = decrypt($encrypt, $key); echo $encrypt, "\n", $decrypt;