Skip to content

Instantly share code, notes, and snippets.

@wong2
Created January 2, 2013 09:44
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save wong2/4433334 to your computer and use it in GitHub Desktop.
Save wong2/4433334 to your computer and use it in GitHub Desktop.
模拟登录人人(新)

人人的登录改版后,采用RSA加密后传输密码,该项目用于解决这种情况下人人的模拟登录

使用前先 pip install requests

#-*-coding:utf-8-*-
# 分段加密
CHUNK_SIZE = 30
# RSA加密
def enctypt(e, m, c):
return pow(c, e, m)
# 加密一段
def enctyptChunk(e, m, chunk):
chunk = map(ord, chunk)
# 补成偶数长度
if not len(chunk) % 2 == 0:
chunk.append(0)
nums = [ chunk[i] + (chunk[i+1] << 8) for i in range(0, len(chunk), 2) ]
c = sum([n << i*16 for i, n in enumerate(nums)])
encypted = enctypt(e, m, c)
# 转成16进制并且去掉开头的0x
return hex(encypted)[2:]
# 加密字符串,如果比较长,则分段加密
def encryptString(e, m, s):
e, m = int(e, 16), int(m, 16)
chunks = [ s[:CHUNK_SIZE], s[CHUNK_SIZE:] ] if len(s) > CHUNK_SIZE else [s]
result = [enctyptChunk(e, m, chunk) for chunk in chunks]
return ' '.join(result)[:-1] # 去掉最后的'L'
if __name__ == '__main__':
print encyptString('10001', '856381005a1659cb02d13f3837ae6bb0fab86012effb3a41c8b84badce287759', 'abcdef')
#-*-coding:utf-8-*-
import requests
import random
import re
from encrypt import encryptString
class RenRen:
def __init__(self):
self.session = requests.Session()
self.token = {}
def loginByCookie(self, cookie_path):
with open(cookie_path) as fp:
cookie_str = fp.read()
cookie_dict = dict([v.split('=', 1) for v in cookie_str.strip().split(';')])
self.session.cookies = requests.utils.cookiejar_from_dict(cookie_dict)
self.getToken()
def login(self, email, pwd):
key = self.getEncryptKey()
data = {
'email': email,
'origURL': 'http://www.renren.com/home',
'icode': '',
'domain': 'renren.com',
'key_id': 1,
'captcha_type': 'web_login',
'password': encryptString(key['e'], key['n'], pwd) if key['isEncrypt'] else pwd,
'rkey': key['rkey']
}
url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=%f' % random.random()
r = self.post(url, data)
result = r.json()
if result['code']:
print 'login successfully'
r = self.get(result['homeUrl'])
self.getToken(r.text)
else:
print 'login error', r.text
def getEncryptKey(self):
r = requests.get('http://login.renren.com/ajax/getEncryptKey')
return r.json()
def getToken(self, html=''):
p = re.compile("get_check:'(.*)',get_check_x:'(.*)',env")
if not html:
r = self.get('http://www.renren.com')
html = r.text
result = p.search(html)
self.token = {
'requestToken': result.group(1),
'_rtk': result.group(2)
}
def request(self, url, method, data={}):
if data:
data.update(self.token)
if method == 'get':
return self.session.get(url, data=data)
elif method == 'post':
return self.session.post(url, data=data)
def get(self, url, data={}):
return self.request(url, 'get', data)
def post(self, url, data={}):
return self.request(url, 'post', data)
def getUserInfo(self):
r = self.get('http://notify.renren.com/wpi/getonlinecount.do')
return r.json()
if __name__ == '__main__':
renren = RenRen()
renren.login('email', 'password')
info = renren.getUserInfo()
print 'hello', info['hostname']
@cuijiudai
Copy link

good !好用

@zzz6519003
Copy link

俺想知道怎么拷贝cookie 或者格式。。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment