2012-09-30 5 views
14

Welche Verschlüsselungsmethode wird in/etc/shadow auf GNU/Linux-Systemen verwendet? Ich möchte ein kleines Programm für persönliche Zwecke schreiben, das die gleiche API verwendet, aber im Moment weiß ich nicht, wo ich anfangen soll.Welche Verschlüsselungsmethode wird in/etc/shadow verwendet?

Vielen Dank im Voraus

+0

Die Lösung ist man 3 Krypta, MD5 kompilieren sollte. Ich wollte wissen, ob jemand Erfahrung mit diesen APIs hat !!! – b3h3m0th

+0

Dies ist nützlich für meinen Zweck: http://StackOverflow.com/Questions/2565427/c-Crypt-Function – b3h3m0th

+0

sehr informativ http://StackOverflow.com/Questions/8794588/Public-Key-Implementation-in-c- für-linux? rq = 1 – b3h3m0th

Antwort

32

Verwenden Sie die crypt(3) Funktion. Bei glibc hängt die verwendete Methode vom Salz ab, wenn es mit:

  • $ 1 $ beginnt: es verwendet MD5.
  • $ 5 $: es verwendet SHA-256.
  • $ 6 $: Es verwendet SHA-512.
  • $ 2a $: Es verwendet Blowfish, nicht überall unterstützt.
  • Ansonsten verwendet es DES.
+0

vielen dank. Mann 3 Krypta ist wirklich kryptisch !!! – b3h3m0th

+0

Die Methode, mit der der Passwort-Klartext "verschlüsselt" wird, hängt nicht vom Salz ab! Die Zeichenfolge zwischen dem ersten Paar von $ s gibt die Methode "encryption" an, die Zeichenfolge zwischen dem zweiten $ s-Paar ist das tatsächliche Salz für diese "Verschlüsselungsmethode". – fpmurphy1

+2

@fpmurphy: Der zweite Parameter von 'crypt()' wird 'salt' genannt und enthält einen Verschlüsselungsalgorithmus und das echte Salz. – ninjalj

6

Mehrere Verschlüsselungsmethoden in glibc verfügbar sind, man 3 Krypta sehen, der Glibc Abschnitt Hinweise: http://manpages.courier-mta.org/htmlman3/crypt.3.html

Wenn ein vorhandenes Kennwort Überprüfung nur die verschlüsselten Form als Salz passieren; nur der ursprüngliche $ id $ sal Teil wird verwendet. Wenn Sie ein neues Passwort erstellen, initialisieren Sie die ID mit allem, was Sie brauchen, und fügen Sie einige zufällige Zeichen in salt ein.

+0

Es scheint nicht sehr schwierig zu sein. Vielen Dank – b3h3m0th

2

einfaches Beispiel mit Krypta()

#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); 
} 

Compile Programm:

$ gcc -lcrypt test.c 
+0

info über die Header: http://stackoverflow.com/questions/6127921/is-the-crypt-function-declared-in-unistd-h-or-crypt-h – b3h3m0th

-1

I erhalten

undefined reference to `crypt‘

so denke ich, dass Sie mit

$ gcc test.c -lcrypt

Verwandte Themen