Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo se almacenan las contraseñas de los usuarios de PostgreSQL mediante el cifrado md5 y si están saladas

Cómo se almacenan las contraseñas de los usuarios de PostgreSQL mediante el cifrado md5 y si están saladas

1. ¿Cómo se cifra la contraseña del usuario de PG mediante md5? ¿Se agrega sal? Este artículo rastreará y analizará desde la perspectiva del código fuente.

1. Los usuarios de PG agregan sal al cifrar a través de md5. Esta sal es la cadena de nombre de usuario.

2. Análisis del código fuente

CreateRole:

shadow_pass = encrypt_password(Password_encryption, stmt-gt; rol, contraseña);

|-- pg_md5_ encrypt(contraseña, rol, strlen(rol), contraseña_encriptada);

| memcpy(crypt_buf, passwd, passwd_len);

| rol, strlen(rol));

| strcpy(buf, "md5");

|-- |-- pg_md5_hash(crypt_buf, passwd_len salt_len, buf 3);

new_ record[Anum_pg_authid_rolpassword - 1] = CStringGetTextDatum(shadow_pass);

Tres, seguimiento de gdb

1. Punto de interrupción en la función encrypt_password y luego ejecute el cliente Fin: cree el usuario yzs con la contraseña "123456"; use la contraseña para crear el usuario y observe si se usa md5 de forma predeterminada.

postgres=# crear usuario yzs con contraseña '123456';

2. Información de la pila

Punto de interrupción 1, encrypt_password (target_type=PASSWORD_TYPE_MD5, role=0x99c3b3c " yzs ", contraseña=0x99c3b4c "123456") en crypt.c:111

111 Tipo de contraseña adivinado_tipo = get_password_type(contraseña);

(gdb) bt

#0 encrypt_password (target_type=PASSWORD_TYPE_MD5, role=0x99c3b3c "yzs", contraseña=0x99c3b4c "123456") en crypt.c:111

#1 0x0827b7a2 en CreateRole (pstate=0x9a0d804, stmt=0x99c3bbc) en user.c: 412

#2 0x0840fc18 en standard_ProcessUtility (pstmt=0x99c3c14, queryString= 0x99c31dc "crear usuario yzs con contraseña '123456';", contexto=PROCESS_UTILITY_TOPLEVEL, params=0x0, queryEnv=0x0,

dest=0x99c3d74, completeTag=0xbf9119e6 "") en utilidad.c:722

#3 0x0840f42a en ProcessUtility (pstmt=0x99c3c14, queryString= 0x99c31dc "crear usuario yzs con contraseña ' 123456 ';", contexto=PROCESS_UTILITY_TOPLEVEL, params=0x0, queryEnv=0x0,

dest=0x99c3d74, completeTag=0xbf9119e6 "") en utilidad.c: 357

#4 0x0840e6ea en PortalRunUtility (portal=0x9a20634, pstmt= 0x99c3c14, isTopLevel=1 '\001', setHoldSnapshot=0 '\000', dest=0x99c3d74, completeTag= 0xbf9119e6 "") en pquery.c:1178

# 5 0x0840E8B7 en PortalRunmulti (Portal = 0x9A20634, ISTOPLEVEL = 1 '\ \ \ \ 001', Setholdsnapshot = 0 '\000', Dest = 0x99C3D74, AltDest = 0x99C3DD 74, CompleTINTAG = 0xbf9119E6 "") en pquely.c: 1324

#6 0x0840ded2 en Por

talRun (portal=0x9a20634, count=2147483647, isTopLevel=1 '\001', run_once=1 '\001 ', dest=0x99c3d74, altdest=0x99c3d74, completeTag=0xbf9119e6 "") en pquery.c:799

#7 0x08408692 en exec_simple_query (query_string=0x99c31dc "crear usuario yzs con contraseña '123456';") en postgres.c:1099

#8 0x0840c5d4 en PostgresMain (argc=1, argv=0x997edc4 , dbname=0x997ecf4 "postgres", nombre de usuario=0x99558cc "postgres") en postgres.c:4081

#11 0x083822d9 en ServerLoop () en postmaster.c:1755

#12 0x083819d6 en PostmasterMain (argc=3, argv=0x9953810) en postmaster.c:1363