существует простой способ шифрования/дешифрования строки ключом.
somthing like:
key = '1234'
string = 'hello world'
encrypted_string = encrypt(key, string)
decrypt(key, encrypted_string)
Я не мог найти ничего простого для этого.
существует простой способ шифрования/дешифрования строки ключом.
somthing like:
key = '1234'
string = 'hello world'
encrypted_string = encrypt(key, string)
decrypt(key, encrypted_string)
Я не мог найти ничего простого для этого.
http://www.dlitz.net/software/pycrypto/ должен делать то, что вы хотите.
Взято со страницы своих документов.
>>> 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'
pyDES - это реализация DES и Triple-DES, полностью написанная на питоне.
Вот простой и переносимый пример, который должен быть достаточно безопасным для базового шифрования строк. Просто поместите модуль pyDES в ту же папку, что и ваша программа, и попробуйте:
Компьютер отправителя
>>> from pyDES import * # pyDes if installed from pip
>>> ciphertext = triple_des('a 16 or 24 byte password').encrypt("secret message", padmode=2) #plain-text usually needs padding, but padmode = 2 handles that automatically
>>> ciphertext
')\xd8\xbfFn#EY\xcbiH\xfa\x18\xb4\xf7\xa2' #gibberish
Компьютер получателя
>>> from pyDES import *
>>> plain_text = triple_des('a 16 or 24 byte password').decrypt(')\xd8\xbfFn#EY\xcbiH\xfa\x18\xb4\xf7\xa2', padmode=2)
>>> plain_text
"secret message"
для python 2, вы должны использовать keyczar http://www.keyczar.org/
для python 3, пока не доступен keyczar, я написал simple-crypt http://pypi.python.org/pypi/simple-crypt
Я отвечаю на эти два года позже, поскольку все изменилось с тех пор, как был задан вопрос.
Обратите внимание, что в предыдущих ответах на этот вопрос используются слабые шифры (по сегодняшним меркам) и не имеют никакого укрепления. две рекомендации здесь, вероятно, более безопасны.
Самый простой и быстрый способ шифрования короткого текстового фрагмента с помощью предварительного ключа - использовать одну из функций криптохрапы (md5, sha и т.д.).
то есть. calc md5 вашего ключа, затем xor фрагмент строки с этим хешем md5. если вам нужно закодировать фрагменты текста дольше, чем длина md5 - do md5 (хеш md5) и зашифровать следующий фрагмент.
Безопасность этого решения хуже, чем у 3-DES, но достаточно в среднем случае (то есть для хранения не очень безопасного пароля в файле конфигурации), и он не требует ничего, кроме базового дистрибутива python.
Если вам нужна более эффективная защита - найдите одну из AES, Blowfish и т.д., но для того, чтобы действительно помочь AES, вам нужно сделать дополнительную работу для смешивания ваших данных со случайными.
Чтобы расширить ответ на dsamersoff... Это просто и небезопасно, но для некоторых задач может быть полезно. здесь некоторый код:
import crypt
import getpass
import os.path
def auth_func():
return (raw_input('Username:'), getpass.getpass('Password:'))
def xor(a,b):
assert len(b) >= len(a)
return "".join([chr( ord(a[i]) ^ ord(b[i])) for i in range(len(a))])
# create a new credentials file if needed
if not os.path.exists('cred'):
with open('cred', 'w') as f:
user, pwd = auth_func()
f.write ("{}\n".format(user))
f.write ("{}\n".format(xor(pwd, crypt.crypt('secret', 'words'))))
f.close()
# read credentials and print user/password
with open('cred', 'r') as f:
user, pwd = f.read().split('\n')[:2]
print user
print xor(pwd, crypt.crypt('secret', 'words'))