月度归档:2015年11月

Ngrok 全平台端口映射工具,内网映射到外网端口

去百度云盘下载对应的客户端 http://pan.baidu.com/s/1bnwROLL

创建配置文件 ngrok.cfg

server_addr: "tunnel.phpor.me:4443"
trust_host_root_certs: false

运行$./ngrok -config ngrok.cfg -subdomain xxx 80

成功连上后 http://xxx.tunnel.phpor.me 访问

当然 ngrok服务器也可以自己搭建。

btw: 当年玩灰鸽子的时候,要有这工具, 那得方便很多呀。。。。。。

python下cookie管理,以字符串添加自定义cookie

一般来说在使用cookielib的CookieJar时,如果想手动设置header中的cookie字段,需要使用MozillaCookieJar从cookie文件载入,这显然太不方便了,如果直接对每一个请求set-header又相当于需要完全自己管理cookie,放弃了urllib2提供的HttpCookieProcessor。有没有两全其美的办法?

读了会源码,发现Cookie库提供的SimpleCookie可以从raw string解析,但是它并不能用于CookieJar的set_cookie方法中,因为CookieJar事实上接受的是cookielib.cookie这个类型… 但仍然可以利用SimpleCookie的解析方式,提取出raw string的value pair,调用cookielib.cookie的构造函数传入set_cookie中。

#! /usr/bin/python
# -*- coding: utf-8 -*-
import urllib2
import cookielib
import Cookie
from cookielib import Cookie as libcookie

def parse(rawstr,url):
    #url = '.'+'.'.join(url.split('.')[1:])
    c = Cookie.SimpleCookie()
    c.load(rawstr)
    ret = []
    for k in c:
        #get v as Morsel Object
        v = c[k]
        ret.append(libcookie(
                    name=v.key,
                    value = v.value,
                    version=0,
                    port=None,
                    port_specified = False,
                    domain=url,
                    domain_specified=True,
                    domain_initial_dot=True,
                    path='/',
                    path_specified=True,
                    secure=False,
                    expires=None,
                    discard=False,
                    comment=None,
                    comment_url=None,
                    rest={'HttpOnly': None},
                    rfc2109=False,
        ))
    return ret
cookie = cookielib.CookieJar()
cs = parse("username111=aaaaaa; password1=1234567;","127.0.0.1")
for c in cs:
    cookie.set_cookie(c)
cookieProc = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(cookieProc)
urllib2.install_opener(opener)
f = opener.open('http://127.0.0.1/test/t3.php?action=login')
f1=opener.open("http://127.0.0.1/test/t3.php?action=test");
print f1.read()
for ac in cookie:
    print ac.name+":"+ac.value+":"+ac.domain

移动开发之api接口的安全验证方案(AES+RSA)

AES算法流程

RSA算法实现流程

AES与RSA相结合数据加密方案

用rsa加密aes密钥 服务器先用rsa解密出ase的密钥, 再去解密密文

RSA算法是公开密钥系统的代表,其安全性建立在具有大素数因子的合数,其因子分解困难这一法则之上的。Rijndael算法作为新一代的高级加密标准,
运行时不需要计算机有非常高的处理能力和大的内存,操作可以很容易的抵御时间和空间的攻击,在不同的运行环境下始终能保持良好的性能。这使AES将安全,
高效,性能,方便,灵活性集于一体,理应成为网络数据加密的首选。相比较,因为AES密钥的长度最长只有256比特,可以利用软件和硬件实现高速处理,而
RSA算法需要进行大整数的乘幂和求模等多倍字长处理,处理速度明显慢于AES[5];所以AES算法加解密处理效率明显高于RSA算法。在密钥管理方
面,因为AES算法要求在通信前对密钥进行秘密分配,解密的私钥必须通过网络传送至加密数据接收方,而RSA采用公钥加密,私钥解密(或私钥加密,公钥解
密),加解密过程中不必网络传输保密的密钥;所以RSA算法密钥管理要明显优于AES算法。
从上面比较得知,由于RSA加解密速度慢,不适合大量
数据文件加密,因此在网络中完全用公开密码体制传输机密信息是没有必要,也是不太现实的。AES加密速度很快,但是在网络传输过程中如何安全管理AES密
钥是保证AES加密安全的重要环节。这样在传送机密信息的双方,如果使用AES对称密码体制对传输数据加密,同时使用RSA不对称密码体制来传送AES的
密钥,就可以综合发挥AES和RSA的优点同时避免它们缺点来实现一种新的数据加密方案

具体过程是先由接收方创建RSA密钥对,接收方通过Internet发送RSA公钥到发送方,同时保存RSA私钥。而发送方创建AES密钥,并用该AES
密钥加密待传送的明文数据,同时用接受的RSA公钥加密AES密钥,最后把用RSA公钥加密后的AES密钥同密文一起通过Internet传输发送到接收
方。当接收方收到这个被加密的AES密钥和密文后,首先调用接收方保存的RSA私钥,并用该私钥解密加密的AES密钥,得到AES密钥。最后用该AES密
钥解密密文得到明文。

如何生成RSA密钥