Найти - Пользователи
Полная версия: Получение хэша файла, шифрование файла
Начало » Python для новичков » Получение хэша файла, шифрование файла
1
Te0reTiK
Криптографические модули

В силу различных причин (в том числе политических — во многих странах запрещена разработка и распространение криптографического программного обеспечения без разрешения соответствующих государственных структур) поддержка криптографии в стандартной библиотеке Python весьма ограниченна и сводится к хеш-функциям .
В версии 2.5 структура крипто библиотеки была унифицирована — все хеш функции собраны в модуль hashlib и удалены бесполезные модули некриптостойкого шифрования. Ранние модули md5,hmac,sha объявлены устаревшими и будут удалены в одном из последующих релизов.

Как и в некоторых других случаях ( DB-API, Python Web Server Gateway Interface) при невозможности (или нецелесообразности) включить полноценную поддержку технологии в стандартную библиотеку были приняты стандарты на интерфейсы, предоставляемые внешними библиотеками - API для хеш-функций, API для блочных шифров. Однако далеко не все библиотеки соответствуют этим требованиям (либо в силу старости — созданы до написания CryptoAPI, либо из-за того что являются автоматически сгенерированными обертками поверх соответствующих C библиотек).

—-взято с http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D0%B0%D1%8F_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_Python


Подскажите
а как получить хэш(не обязательно md5) файла, расположенного на локальном диске?
Как зашифровать/расшифровать файл? - нужна высокая степень стойкости
tmp_a6367100
для хеширвоания – подойдёт _стандартная_ библиотека . модуль hashlib ( http://docs.python.org/library/hashlib.html )

filename = u'путь/к/файлу'
with open(filename) as fd
h = hashlib.new('sha256') # выбор алгоритма
h.update(fd.read())
result = h.hexdigest() # результат
для шифрования – придётся использовать какойнить модуль – _не_ входящий в стандартный пакет
tmp_a6367100
документация по Python-Crypto (модуль НЕ входящий в стандартнку библиотеку) – расположена внутри исходных кодов этого модуля…

…вот например для HEAD-версии: http://bazaar.launchpad.net/~amk/pycrypto/trunk/annotate/head%3A/Doc/pycrypt.rst

online-конвертор для формата rst (для чтения файла документации) – http://www.tele3.cz/jbar/rest/rest.html

**********

цытата из документации (если кому лень ходить по ссылкам :-D )

>>> from Crypto.Cipher import DES
>>> obj=DES.new('abcdefgh', DES.MODE_ECB)
>>> plain="Guido van Rossum is a space alien."
>>> len(plain)
34
>>> obj.encrypt(plain)
Traceback (innermost last):
File "<stdin>", line 1, in ?
ValueError: Strings for DES must be a multiple of 8 in length
>>> ciph=obj.encrypt(plain+'XXXXXX')
>>> ciph
'\021,\343Nq\214DY\337T\342pA\372\255\311s\210\363,\300j\330\250\312\347\342I\3215w\03561\303dgb/\006'
>>> obj.decrypt(ciph)
'Guido van Rossum is a space alien.XXXXXX'
tmp_a6367100
про то какие алгоритмы более стойки а какие менее стройкие – это отдельная тема (не связанная ни с Python, ни с Python-Crypto . т к Python – будут делать ровно то что вы ему скажете)

алгоритм “Advanced Encryption Standard” (AES) (и алгоритм Blowfish) – в режиме “Cipher Block Chaining” (CBC) – по мне так – вполне надёжный :-)
tmp_a6367100
также при шифровании – не забывайте для КАЖДОЙ операции шифрования использовать свой РАЗНЫЙ вектор иницализации
(разумеется значение вектора инициализации придётся сохранять… видимо в томже месте где и зашифрованные данные)

# p.s.: новечки в шифровании первым делом могут НЕразобраться зачем вобще нужен этот вектор инициализации, и поэтому используют один и тотже. отвечаю – вектор инициализации нужен (каждый раз разный) – для того чтобы шифро-поток был всегда разным даже для одинаковых областей нешифрованного текста, и таким образом чтобы усложнить злоумышленнию анализ зашифрованных данных (когда злоумышленний наберёт большое множество ранее зашифрованной информации)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB