1
- #!/usr/bin/python
1
+ #!/usr/bin/env python
2
2
# -*- coding: UTF-8 -*-
3
3
4
4
import base64
5
5
import json
6
6
import sys
7
- from urllib import unquote
7
+ from urllib . parse import unquote
8
8
9
9
import requests
10
10
import rsa
@@ -63,11 +63,7 @@ def convert_rsa_key(s):
63
63
b_str = base64 .b64decode (s )
64
64
if len (b_str ) < 162 :
65
65
return False
66
- hex_str = ''
67
- for x in b_str :
68
- h = hex (ord (x ))[2 :]
69
- h = h .rjust (2 , '0' )
70
- hex_str += h
66
+ hex_str = b_str .hex ()
71
67
m_start = 29 * 2
72
68
e_start = 159 * 2
73
69
m_len = 128 * 2
@@ -82,50 +78,50 @@ def rsa_encrypt(string, pubkey):
82
78
modulus = int (key [0 ], 16 )
83
79
exponent = int (key [1 ], 16 )
84
80
rsa_pubkey = rsa .PublicKey (modulus , exponent )
85
- crypto = rsa .encrypt (string , rsa_pubkey )
81
+ crypto = rsa .encrypt (string . encode () , rsa_pubkey )
86
82
return base64 .b64encode (crypto )
87
83
88
84
89
85
def get_stok (url , username , password ):
90
86
# get key nonce
91
- print "-get rsa and nonce"
87
+ print ( "-get rsa and nonce" )
92
88
j = post_data (url , json .dumps ({"method" : "do" , "login" : {}}))
93
89
key = unquote (j ['data' ]['key' ])
94
90
nonce = str (j ['data' ]['nonce' ])
95
- print "rsa: " + key
96
- print "nonce: " + nonce
91
+ print ( "rsa: " , key )
92
+ print ( "nonce: " , nonce )
97
93
98
94
# encrypt tp
99
- print "--encrypt password by tp"
95
+ print ( "--encrypt password by tp" )
100
96
tp_password = tp_encrypt (password )
101
97
tp_password += ":" + nonce
102
- print "tp_password: " + tp_password
98
+ print ( "tp_password: " , tp_password )
103
99
104
100
# rsa password
105
- print "--encrypt password by rsa"
101
+ print ( "--encrypt password by rsa" )
106
102
rsa_password = rsa_encrypt (tp_password , key )
107
- print "rsa_password: " + rsa_password
103
+ print ( "rsa_password: " , rsa_password )
108
104
109
105
# login
110
106
d = {
111
107
"method" : "do" ,
112
108
"login" : {
113
109
"username" : username ,
114
110
"encrypt_type" : "2" ,
115
- "password" : rsa_password
111
+ "password" : rsa_password . decode ()
116
112
}
117
113
}
118
- print "--login"
114
+ print ( "--login" )
119
115
j = post_data (url , json .dumps (d ))
120
116
stok = j ["stok" ]
121
117
return stok
122
118
123
119
124
120
def post_data (base_url , data , stok = "" ):
125
121
url = base_url + (("/stok=" + stok + "/ds" ) if stok else "" )
126
- print "post: " + url + " data: " + data
122
+ print ( "post: " , url , " data: " , data )
127
123
r = requests .post (url , data )
128
- print "response: " + str (r .status_code ) + " " + str (r .json ())
124
+ print ( "response: " , str (r .status_code ), " " , str (r .json () ))
129
125
return r .json ()
130
126
131
127
@@ -134,8 +130,8 @@ def post_data(base_url, data, stok=""):
134
130
password = str (sys .argv [2 ])
135
131
base_url = str (sys .argv [3 ])
136
132
data = str (sys .argv [4 ])
137
- print "username: " + username
138
- print "password: " + password
139
- print "base_url: " + base_url
140
- print "data: " + data
141
- post_data (base_url , data , get_stok (base_url , username , password ))
133
+ print ( "username: " , username )
134
+ print ( "password: " , password )
135
+ print ( "base_url: " , base_url )
136
+ print ( "data: " , data )
137
+ post_data (base_url , data , get_stok (base_url , username , password ))
0 commit comments