Хэш, называемый по-английски hash。
Хэш-функция (хеш функция) может быть Данные произвольной длины (байтовая строка) рассчитываются для данных результата фиксированной длины.
мы привыкли Чтобы рассчитать Данные называются исходные данные, Данные рассчитанного результата называются Хэш значение) или Дайджесты.
Существует несколько хеш-функций, соответствующих разным алгоритмам: Общий MD5, SHA1, SHA224, SHA256, SHA384, SHA512
Характеристики вычисления хеша:
Такой же исходные данные, использовать Такой же Хэшалгоритм, рассчитанное значение хеш-функции Должно быть то же самое
несмотря на исходные данные какой большой,Такой же Хэшалгоритм,рассчитанное значение хеш-функции长度 Они все одинаковой длины.
алгоритм Длина результата расчета
MD5 16 байт
SHA1 20 байт
SHA224 28 байт
SHA256 32 байта
SHA384 48 байт
SHA512 64 байта
алгоритм Необратимый.
Другими словами, он не может пройти Хэш-значение В свою очередь, вычислите исходные данные。 Таким образом, хеширование отличается от шифрования и дешифрования, о которых мы часто говорим.
Разные исходные данные Используйте тот же Хашалгоритм,может привести Такой же Хэш-значение,Это называется частотой столкновений(collision rate)
Различный Хэшалгоритм,Чем больше рассчитанная длина результата,Чем ниже частота столкновений,Обычно расчет занимает больше времени.
Даже если это MD5 алгоритм, Частота столкновений также Очень маленький, почти ничтожный. Примерно 1,47*10 в отрицательной 29 степени
'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512',
'blake2b', 'blake2s',
'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512',
'shake_128', 'shake_256'
# coding=utf-8
"""
@Project :pachong-master
@File :hash_test.py
@Author :gaojs
@Date :2022/7/11 21:15
@Blogs : https://www.gaojs.com.cn
"""
import hashlib
# Используйте md5 алгоритм
h = hashlib.md5()
# sha 256алгоритм
# m = hashlib.sha256()
# Чтобы Метаданные для защиты должны быть в строковом формате.
# Строковые объекты необходимо закодировать и преобразовать в объекты байтовой строки.
h.update("Hi, Моя судьба зависит от меня.".encode())
# Сгенерировать объект байтов, соответствующий Хэш-значению
resultBytes = h.digest()
resultHex = h.hexdigest()
print(resultHex)
# coding=utf-8
"""
@Project :pachong-master
@File :hash_test.py
@Author :gaojs
@Date :2022/7/11 21:15
@Blogs : https://www.gaojs.com.cn
"""
import hashlib
# Используйте md5 алгоритм
# h = hashlib.md5()
# md5 Вмешательство шифрования следующее: 8b365af9b1089f502e7bc60ac9c81ed2
# sha 256алгоритм
h = hashlib.sha256()
# Чтобы Метаданные для защиты должны быть в строковом формате.
# Строковые объекты необходимо закодировать и преобразовать в объекты байтовой строки.
h.update("Hi, Моя судьба зависит от меня.".encode())
# Сгенерировать объект байтов, соответствующий Хэш-значению
resultBytes = h.digest()
resultHex = h.hexdigest()
# Шифрование SHA 256 результатов выглядят следующим образом:
print(resultHex)
# coding=utf-8
"""
@Project :pachong-master
@File :hash_test.py
@Author :gaojs
@Date :2022/7/11 21:15
@Blogs : https://www.gaojs.com.cn
"""
import hashlib
# Используйте md5 алгоритм
# h = hashlib.md5()
# md5 Вмешательство шифрования следующее: 8b365af9b1089f502e7bc60ac9c81ed2
# sha 512алгоритм
h = hashlib.sha512()
# Чтобы Метаданные для защиты должны быть в строковом формате.
# Строковые объекты необходимо закодировать и преобразовать в объекты байтовой строки.
h.update("Hi, Моя судьба зависит от меня.".encode())
# Сгенерировать объект байтов, соответствующий Хэш-значению
resultBytes = h.digest()
resultHex = h.hexdigest()
# Шифрование SHA 512 Результаты следующие:
# c945f94c933078a77812afa75cd693ee17e581b9920696063cf50983fcb1a56d577565c3bcda05badc6c4ffdf64f1abbdd6dd0897c3e1620950b7ec31c96fe6c
print(resultHex)
Та же рутина
Шифрование и дешифрованиеалгоритм,даисходные данные Выполните операции для создания зашифрованных данных и обратный процесс для обратного расчета зашифрованных данных. исходные данные。
Шифрование и дешифрованиеалгоритм и hashалгоритм Отличия заключаются в следующем:
Шифрование и дешифрованиеалгоритм является обратимым,хеш-алгоритм необратим.
хеш-алгоритм может выдавать меньшее Хэш-значение для больших данных,ишифрованиеалгоритмисходные данныеочень большой,шифрование后的数据也会очень большой
Шифрование и дешифрованиеалгоритм можно разделить на Симметричное шифрование а также Нет Симметричное шифрование
Симметричное шифрование обратитесь к шифрованиеи Расшифровать 使用Такой же ключ 。
и Нет Симметричное шифрование обратитесь к шифрованиеи Расшифровать использовать разные ключ,обычноодинверноключ,назови это открытым ключом(用来шифрование)изакрытый ключ(用来Расшифровать)。
относительно распространен Симметричное шифрованиеалгоритмиметь: AES, RC4, DES, 3DES, IDEA ждать.
Среди них тот, у которого более высокий уровень безопасности. AES。
Самый известный Нет Симметричное шифрование系统 то есть RSA (Rivest–Shamir–Adleman) 。
hash_jiemi.py
# coding=utf-8
"""
@Project :pachong-master
@File :hash_jiemi.py
@Author :gaojs
@Date :2022/7/11 21:34
@Blogs : https://www.gaojs.com.cn
"""
# В настоящее время библиотеки шифрования и дешифрования Python с относительно хорошей репутацией включают в себя cryptography и PyNaCl
from cryptography.fernet import Fernet
def jiami():
"""
Процесс шифрования и дешифрования
:return:
"""
# Вот использование Эта библиотека выполняет AES Примеры операций шифрования и дешифрования
# сгенерировать секретный ключ
key = Fernet.generate_key()
fin = Fernet(key)
strings = 'gaojs, Моя судьба зависит от меня!»
# Исходная информация должна быть строкой
stringsBytes = strings.encode()
# Генерировать зашифрованные байты
token_result = fin.encrypt(stringsBytes)
print(token_result)
# Расшифровка, возвращаемое значение представляет собой объект байтовой строки.
result = fin.decrypt(token_result)
print(result.decode())
if __name__ == '__main__':
jiami()