Библиотека Python для генерации хеш-значений в виде чисел - PullRequest
0 голосов
/ 30 декабря 2018

Я ищу библиотеку, в которой мне нужно хэшировать строку, которая должна содержать номера производителей, а не буквенно-цифровые

eg:
Input string: hello world
Salt value: 5467865390
Output value: 9223372036854775808

Я искал много библиотек, но эти библиотеки выдают буквенно-цифровые цифры в качестве вывода, ноМне нужны простые числа в качестве вывода.

Есть ли такая библиотека?Хотя проблема наличия только чисел в качестве выходных данных будет иметь высокую вероятность коллизии, но это хорошо для моего бизнес-сценария.

РЕДАКТИРОВАТЬ 1: Также мне нужно контролировать количествоцифры на выходе.Я хочу сохранить значение в базе данных, которая имеет тип данных Numeric.Поэтому мне нужно контролировать количество цифр, чтобы соответствовать размеру в диапазоне типов данных

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Я думаю, что нет необходимости в библиотеках.Вы можете просто сделать это с помощью функции hash() в python.

InputString="Hello World!!"
HashValue=hash(InputString)
print(HashValue)
print(type(HashValue))

Вывод:

8831022758553168752                                                                              
<class 'int'> 

Решение проблемы на основе последней редакции:

Вышеприведенный метод является самым простым решением, изменение хеша для каждого вызова поможет нам предотвратить нападение нашего приложения на злоумышленников.

Если вы хотите отключить рандомизацию, вы можете просто сделать это, назначив PYTHONHASHSEED to zero.

Информацию об отключении рандомизации смотрите в официальных документах https://docs.python.org/3.3/using/cmdline.html#cmdoption-R

0 голосов
/ 30 декабря 2018

Шестнадцатеричные хэш-коды могут быть интерпретированы как (довольно большие) числа:

import hashlib
hex_hash = hashlib.sha1('hello world'.encode('utf-8')).hexdigest()
int_hash = int(hex_hash, 16)  # convert hexadecimal to integer
print(hex_hash)
print(int_hash)

выходы

'2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
243667368468580896692010249115860146898325751533

РЕДАКТИРОВАТЬ: Как просили в комментариях, чтобы ограничить число определеннымдиапазон, вы можете просто использовать оператор модуля.Обратите внимание, конечно, что это увеличит вероятность столкновений.Например, мы можем ограничить «хэш» 0 .. 9 999 999 с модулем 10 000 000.

limited_hex_hash = hex_hash % 10_000_000
print(limited_hex_hash)

output

5751533
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...