web-dev-qa-db-ja.com

/ etc / shadowで使用されている暗号化方法はどれですか?

GNU/Linuxシステムの/ etc/shadowで使用されている暗号化方法はどれですか?同じAPIを使用する個人的な目的で小さなプログラムを書きたいのですが、現時点ではどこから始めればよいかわかりません。

前もって感謝します

17
b3h3m0th

crypt(3) 関数を使用します。 glibcでは、次の文字で始まる場合、使用する方法はソルトによって異なります。

  • $ 1 $:MD5を使用します。
  • $ 5 $:SHA-256を使用します。
  • $ 6 $:SHA-512を使用します。
  • $ 2a $:フグを使用しており、どこでもサポートされているわけではありません。
  • それ以外の場合は、DESを使用します。
37
ninjalj

Glibcでは複数の暗号化方式を使用できます。man3 cryptのGlibcのメモセクションを参照してください。 http://manpages.courier-mta.org/htmlman3/crypt.3.html

既存のパスワードを検証するときは、暗号化されたフォームをソルトとして渡すだけです。最初の$ id $ salt部分のみが使用されます。新しいパスワードを作成するときは、必要なものでidを初期化し、ランダムな文字をソルトに入れます。

6
Petr Baudis

crypt()の基本的な例

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

コンパイルプログラム:

$ gcc -lcrypt test.c
2
b3h3m0th