声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
it审计中网络游戏的收入确认如何计算
Continue Read..js 获取当前时间
Continue Read..var d = new Date() var vYear = d.getFullYear() var vMon = d.getMonth() + 1 var vDay = d.getDate() var h = d.getHours(); var m = d.getMinutes(); var se = d.getSeconds(); s=vYear+(vMon<10 ? "0" + vMon : vMon)+(vDay<10 ? "0"+ vDay : vDay)+(h<10 ? "0"+ h : h)+(m<10 ? "0" + m : m)+(se<10 ? "0" +se : se); document.write(s);//输出时间
声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
【Mysql】使用DBExportDoc V1.0 For MySQL生成数据库字典
Continue Read..1.进入系统控制面板,打开管理工具,然后打开数据源
2.点击添加选择 Mysql ODBC 5.3 Unicode Driver
这个是前期配置
下面打开 我附件里面的 DBExportDoc V1.0 For MySQL.doc文件
点击连接数据库 新建连接 选择 ODBC
测试通过后 点击确定 然后回到 新建连接的那个框 点击连接
选择要导出的数据表 然后点击导出 就OK了
这里要注意 数据库里面写了注释 导出的时候才会有注释
声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
jquery 防拖拽、CTR+V、CSS设置输入法等
Continue Read..声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
【php】二维码扫描登陆接口
Continue Read..先来张流程图吧 自己画的 有问题的请指出
思路
1,有2个域名 demo.sm.com(二维码页面) apd.sm.com (接口)
2,打开demo.sm.com的时候 先调接口生成一个唯一的 uuid 然后 在调用生成二维码的的接口 用get方式请求 并将uuid传过去
3,demo.sm.com会一直ajax jsonp 请求接口 会返回一个状态值 根据状态值来处理页面逻辑
4,app端扫这个二维码 然后调用绑定接口 将app登陆的 uid 和 uuid绑定 为了防止注入等 会加密一个字符串一起给接口 接口会来判断 这个提交的数据是否来源正常 (参考 支付宝等)
5,app端绑定之后 demo.sm.com这时候会有返回值 然后修改页面状态 比如像微信那样 显示用户图片 等待app端确定
6,app端会出现页面 里面有一个确定按钮 当用后点击之后 整个流程结束
以上只是初步测试 最后最终登陆 感觉还需要加一道验证 防止注入
代码,文档,数据库一起打包放附件了 用YII2写的 一些组件就不放上来了 如redis等
声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
jquery bind,live,delegate区别/用法
Continue Read..[该日志已设置加密,请点击标题输入密码访问]
声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
php的AES/ECB/PKCS5Padding加密
Continue Read..例子如下
<?php class AES{ //AES加密类型有很多 //这个类实现的是AES/ECB/PKCS5Padding加密类型 function AES_PKCS5_ENCRYPT($text, $key){ $alg = MCRYPT_RIJNDAEL_128; // AES $mode = MCRYPT_MODE_ECB; // not recommended unless used with OTP $iv_size = mcrypt_get_iv_size($alg, $mode); $block_size = mcrypt_get_block_size($alg, $mode); $iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM); // pull from /dev/urandom $input = $this->pkcs5_pad($text, $block_size); $crypttext = mcrypt_encrypt($alg, $key, $input, $mode, $iv); return $crypttext; } public function pkcs5_pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } }
声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
【PHP】cookie不刷新生效
Continue Read..声明:此文系舞林cuzn(www.wulinlw.org)原创稿件,转载请保留版权
【PHP】加密解密函数
Continue Read..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 '';
- } //开源代码phpfensi.com
- } else {
- // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因
- // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码
- return $keyc.str_replace('=', '', base64_encode($result));
- }
- }
函数authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文,$operation:DECODE表示解密,其它表示加密,$key:密匙;$expiry:密文有效期.
PHP函数的用法如下:
- $str = 'abcdef';
- $key = 'www.phpfensi.com';
- echo authcode($str,'ENCODE',$key,0); //加密
- $str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk';
- echo authcode($str,'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'';
- } //开源代码phpfensi.com
- }else{
- return str_replace('=','',base64_encode($result));
- }
- }
函数encrypt($string,$operation,$key)中$string:需要加密解密的字符串;$operation:判断是加密还是解密,E表示加密,D表示解密;$key:密匙。
用法代码如下:
- $str = 'abc';
- $key = 'www.phpfensi.com';
- $token = encrypt($str, 'E', $key);
- echo '加密:'.encrypt($str, 'E', $key);
- echo '解密:'.encrypt($str, 'D', $key);