2012-09-30 29 views
14

¿Cuál es el método de encriptación utilizado en/etc/shadow en sistemas GNU/Linux? Me gustaría escribir un pequeño programa para uso personal que use la misma API, pero por el momento no sé por dónde empezar.¿Cuál es el método de encriptación utilizado en/etc/shadow?

Gracias de antemano

+0

La solución es el hombre 3 cripta, MD5. ¡¡Quería saber si alguien tiene experiencia con estas API !!! – b3h3m0th

+0

Esto es útil para mi propósito: http://stackoverflow.com/questions/2565427/c-crypt-function – b3h3m0th

+0

muy informativo http://stackoverflow.com/questions/8794588/public-key-implementation-inc-c- for-linux? rq = 1 – b3h3m0th

Respuesta

32

Utilice la función crypt(3). En glibc, el método utilizado depende de la sal, si comienza con:

  • $ 1 $: usa MD5.
  • $ 5 $: usa SHA-256.
  • $ 6 $: usa SHA-512.
  • $ 2a $: utiliza blowfish, no admitido en todas partes.
  • De lo contrario, utiliza DES.
+0

muchas gracias. hombre 3 cripta es realmente críptico! – b3h3m0th

+0

¡El método utilizado para "encriptar" la contraseña de texto sin formato no depende de la sal! La cadena entre el primer par de $ s indica el método de "cifrado", la cadena entre el segundo par de $ s es la sal real para ese método de "cifrado". – fpmurphy1

+2

@fpmurphy: el segundo parámetro para 'crypt()' se llama 'salt', e incluye un identificador de algoritmo de cifrado y la sal real. – ninjalj

6

métodos de cifrado múltiples están disponibles en glibc, ver hombre 3 cripta, la sección de Glibc Notas: http://manpages.courier-mta.org/htmlman3/crypt.3.html

Al verificar una contraseña existente, sólo tiene que pasar la forma encriptada como la sal; solo se usará la parte inicial $ id $ salt. Al crear una nueva contraseña, inicialice el id con lo que necesite y coloque algunos caracteres aleatorios en salt.

+0

No parece ser muy difícil. Muchas gracias – b3h3m0th

2

ejemplo básico con crypt() Programa

#include <stdio.h> 
#include <stdlib.h> 

#define MAX_STR 256 
#define MAX_SALT 12 

int main(int argc, char *argv[]) { 
    char password[MAX_STR]; 
    char salt[MAX_SALT]; 

    printf("salt: "); 
    scanf("%s", salt); 

    printf("password: "); 
    scanf("%s", password); 

    printf("Encrypt '%s' : '%s'\n", password, crypt(password, salt)); 

    return(EXIT_SUCCESS); 
} 

Compilar:

$ gcc -lcrypt test.c 
+0

información sobre los encabezados: http://stackoverflow.com/questions/6127921/is-the-crypt-function-declared-in-unistd-h-or-crypt-h – b3h3m0th

-1

recibo

referencia indefinida a `cripta'

así que creo que se debe compilar con

$ gcc test.c -lcrypt

Cuestiones relacionadas