Red de conocimiento de divisas - Apertura de cuenta en divisas - ¿Cómo utilizar Python para simular el método de cifrado del módulo jsEncrypt en JS?

¿Cómo utilizar Python para simular el método de cifrado del módulo jsEncrypt en JS?

Al iniciar sesión en Sina Weibo desde una PC, el nombre de usuario y la contraseña se cifran previamente usando js en el cliente. Se obtendrá un conjunto de parámetros antes de POST, y estos parámetros también formarán parte de POST_DATA. De esta manera, no se pueden utilizar los métodos simples habituales para simular el inicio de sesión POST (como Renren).

Es esencial obtener datos de Sina Weibo a través de rastreadores y simular el inicio de sesión.

1. Antes de enviar la solicitud POST, debe obtener cuatro parámetros (servertime, nonce, pubkey y rsakv), en lugar de simplemente obtener servertime y nonce como se mencionó anteriormente, principalmente porque js cambia de usuario. Cifrado de nombre y contraseña.

1.1 Debido al cambio en el método de cifrado, aquí utilizaremos el módulo RSA. Para obtener una introducción al algoritmo de cifrado de clave pública RSA, consulte el contenido relevante en Internet. Descargue e instale el módulo rsa:

Descargar:/signup/signin.php) código fuente, donde puede encontrar la dirección de js /js/sso/ssologin.js, pero el contenido interno está cifrado después Al abrir, puede encontrar un sitio web de descifrado en línea para descifrar y verificar el método de cifrado del nombre de usuario y la contraseña finales.

1.3 Iniciar sesión

El primer paso para iniciar sesión es agregar su nombre de usuario (username) y solicitar la dirección del enlace de prelogin_url:

prelog in _ URL = ' /SSO/prelog en .PHP? Entry = sso & ampcallback = sinassocontroller . prelogincallback & su = % s & amprsakt = mod & ampclient = ssologin .% nombre de usuario

Utilice el método get para obtener algo similar a. el siguiente Contenido del contenido:

sinassocontroller.prelogincallback({"retcode":0,"server time":1362041092,"pcid":"gz-6664 c 3d ea 2 bfda a3 c 94 e 8734 c 9 e 2c 9 E6 a 1f "," nonce":"IRYP4N","pubkey":" eb2a 3856861887 fa 180 BD

Luego podemos extraer el servertime, nonce, pubkey y rsakv que queramos, de Por supuesto, los valores de pubkey y rsakv se pueden escribir en el código, son valores fijos.

2. Anteriormente, el nombre de usuario se calculaba mediante BASE64:

Copia el código. de la siguiente manera:

Nombre de usuario_ = urllib.quote(nombre de usuario)

nombre de usuario = base64 cadena de codificación(nombre de usuario)[:-1]

La contraseña está cifrada. tres veces usando SHA1, y agregue los valores de servertime y nonce para la interferencia. Es decir, después de cifrar SHA1 dos veces, el valor de servertime y nonce se agrega al resultado y luego se calcula SHA1

<. p>En el último método de cifrado rsa, el nombre de usuario sigue siendo el mismo que antes. Trátelo igual;

El método de cifrado de contraseña es diferente del original:

2.1 Primero cree. una clave pública rsa. Los dos parámetros de la clave pública son los valores fijos proporcionados por Sina Weibo, pero todas las cadenas son hexadecimales 16. La primera es la clave pública en el primer paso de inicio de sesión y la segunda es la '10001. ' en el archivo cifrado js.

Estos dos valores deben convertirse de 16 a 10, pero también se pueden escribir en el código aquí, 10001 se escribe directamente como 65537.

El código es el siguiente:

Copia el código de la siguiente manera:

rsaPublickey = int(pubkey, 16)

Clave = rsa.publickey (rsapublickey, 65537 ) #Crear una clave pública.

message = str(server time)+' \ t '+str(nonce)+' \ n '+str(password)# Se obtiene empalmando archivos cifrados js de texto sin formato.

Passwd = rsa.encrypt(message, key)#Encryption

passwd = bin ascii . b2a _ hex(passwd)#Convierte la información cifrada a 16 base.

2.2 La URL pasada en la solicitud: iniciar sesión _ URL = '/SSO/iniciar sesión. ¿PHP? 'cliente = inicio de sesión SSO . js(v 1 . 4 . 4)'

La información del encabezado que se enviará

Copia el código de la siguiente manera:

postPara = {

Entrada':'Weibo',

Puerta de enlace':' 1',

Desde ":",

Estado de guardado ': ' 7 ',

Ticket de usuario ': ' 1 ',

ssosimplelogin': '1 ',

vsnf': '1 ' ,

vsnval ":",

' su ':nombre de usuario codificado,

servicio': 'mini-blog',

'hora del servidor': hora del servidor,

'current': hora actual,

pwencode': 'rsa2',

sp': encodedPassWord,

codificación':'UTF-8',

pretest':'115',

'rsakv': rsakv,

url' : '/ajaxlogin.php? framelogin = 1 & callback = parent . sinassocontroller . URL de devolución de llamada ',

returntype': 'META '

}

Rsakv agregado a la solicitud, el El valor de pwencode se cambia a rsa2; de lo contrario, es el mismo que antes.

Organizar parámetros y publicar solicitudes. Para comprobar si el inicio de sesión se realizó correctamente, puede consultar la posición de la oración. reemplazar("/ajaxlog.php? framelogin = 1 & callback = parent . sinassocontroller . URL de retroalimentación callback & retcode = 101 . motivo = % B5 % C7 % C2 % BC % C3 % FB % BB % F2 % C3 % DC % C2 % EB % B4 % ED % CE % F3 ");

Si retcode=101, el inicio de sesión falla. Después de iniciar sesión correctamente, el resultado es similar, pero el valor de retcode es 0.

3. Después de iniciar sesión correctamente, la URL que aparece en la información de reemplazo en el texto es la URL que usaremos a continuación. Luego use el método GET para enviar una solicitud al servidor para la URL anterior y guarde la información de la cookie de esta solicitud, que es la cookie de inicio de sesión que necesitamos.

上篇: Soy un novato y me gustaría hacer algunas preguntas sobre acciones. 下篇: Xu Yidian: Todos pueden lograr beneficios, pero no solos. La estrategia sólo la pueden lograr unos pocos, pero no muchos. Obtener la independencia por sí solo conducirá a la derrota, y la planificación de muchos conducirá a la derrota. ?
Artículos populares