2017-01-09 2 views
1

Функции crypt() возвращает строку, как TyVkFBglLfEGw, когда на моей машине Ubuntu всех пароли в виде как $6$Ty8Ew9/O$V/ck4Apc7VOOqobhenO5.f6ccsVdCpQy5H6fyuNzCaDG.LxFnUWKHOobkpRQQtl.1cFG8BLAdfWjNbLiSxKXF/Как создать теневой пароль из программы C

Я думаю, что моя машина использует алгоритм SHA512. Как я могу создать хешированные строки, например, в файле /etc/shadow из программы C?

+1

Вы уверены, что имеете в виду шифрование? Ничто, начиная с SHA, ничего не зашифровывает. Это «алгоритмы безопасного хеширования». Вы можете * хэш * с ними, возможно, даже добавить соль ... Это то, что вы имеете в виду? –

+1

sha принадлежит целостности хэширования. нет шифрования. на самом деле, учитывая длину бита, почти невозможно найти 2 строки, разделяющих один и тот же хеш в SHA512. – HuStmpHrrr

+0

Образец зашифрованного пароля, который вы отправили, является 'SHA-512', используя соль' $ 6 $ Ty8Ew9/O $ '. 'crypt()' вернет зашифрованный пароль без соли. – alvits

ответ

3

Если вы читаете man page for crypt; в частности, часть о Glibc нотах, он упоминает следующее:

The glibc2 version of this function supports additional encryption 
algorithms. 

If salt is a character string starting with the characters "$id$" 
followed by a string terminated by "$": 

     $id$salt$encrypted 

то вместо того, чтобы использовать машину DES, идентификатор идентифицирует шифрование используемого метода, и это определяет то, как интерпретируется остаток строки пароля . Следующие значения идентификатора поддерживаются:

 ID | Method 
     ───────────────────────────────────────────────────────── 
     1 | MD5 
     2a | Blowfish (not in mainline glibc; added in some 
      | Linux distributions) 
     5 | SHA-256 (since glibc 2.7) 
     6 | SHA-512 (since glibc 2.7) 

так что $ 5 $ $ зашифрованы соль представляет собой SHA-256 закодирован паролей и $ 6 $ $ зашифрованы соли является SHA-512 кодируется один.

Это означает, что вы должны передать строку в виде соли, содержащую строку $6$salt, чтобы получить ее для генерации sha-512 crypt, например.

char *salt = "$6$pt4wu5ns"; 
char *password = "muppet show"; 

printf("%s\n", crypt(password, salt)); 
-3

Вот веб-сайт о том, как реализовать алгоритм sha1.

http://bradconte.com/sha1_c

Обычно я бы описать алгоритм, но на самом деле там, с ничего к нему, просто перепутать биты со сложной серии добавляет и сдвиги. Сложный бит - заставить его точно соответствовать всем остальным: s sha1.