разные результаты crypt.crypt на Ubuntu против Fedora - PullRequest
0 голосов
/ 21 января 2019

Я хочу хэшировать пароль с помощью модуля crypt с использованием шифрования blowfish .

На Fedora 29 я получаю правильный результат:

$ python3.7
Python 3.7.2 (default, Jan  3 2019, 09:14:01) 
[GCC 8.2.1 20181215 (Red Hat 8.2.1-6)] on linux

>>> import crypt
>>> crypt.crypt("password", "$2y$08$heregoesasaltstring...")
'$2y$08$heregoesasaltstring...ZR2mMC1niL.pkti1MfmoP.3XVbdoNHm'
>>>

В Ubuntu 18.04 ничего не возвращается:

$ python3.7
Python 3.7.2 (default, Dec 25 2018, 03:50:46) 
[GCC 7.3.0] on linux

>>> import crypt
>>> crypt.crypt("password", "$2y$08$heregoesasaltstring...")
>>>

Python 3.7.1 в Fedora поставляется из репозиториев по умолчанию, в то время как в Ubuntu проблема видна как с python 3.7.1 из официальных репозиториев, так и с тем, который я нашел на внешнем PPA .

Существует ли какая-либо переменная среды или базовая программа / библиотека, которая может изменить поведение Python?

1 Ответ

0 голосов
/ 21 января 2019

Ваша строка соли недопустима в Ubuntu.Попробуйте отбросить все эти знаки доллара.


Из документации Python модуля crypt, который вы связали:

Этот модуль реализует интерфейс к крипте (3) рутина

соль (произвольная строка из 2 или 16 символов, возможно с префиксом $digit$ для обозначения метода), которая будет использоваться длявозмущать алгоритм шифрования.Символы, выделенные солью, должны быть в наборе [./a-zA-Z0-9], за исключением Modular Crypt Format, в котором префиксы $digit$.

From man 3 crypt:

ОШИБКИ

EINVAL: соль имеет неправильный формат.

Я написал тестовую программу для подтверждения этого:

#include <unistd.h>
#include <crypt.h>
#include <errno.h>
#include <stdio.h>

int main() {
    char *s = crypt("password", "$2y$08$heregoesasaltstring...");
    printf("%d\n%d\n%d\n", errno == EINVAL, errno == ENOSYS, errno == EPERM);
    puts(s);
    return 0;
}

Вывод в Ubuntu 18.04 -

ibug@ubuntu:~/t $ gcc t.c -lcrypt
ibug@ubuntu:~/t $ a.out
1
0
0
Segmentation fault (core dumped)
139|ibug@ubuntu:~/t $

У меня нет Fedora в руках, поэтому я не проверял ее.Вы можете скопировать тестовую программу, скомпилировать и запустить ее самостоятельно.

...