простое шифрование / дешифрование lib в python с закрытым ключом - PullRequest
26 голосов
/ 28 сентября 2010

есть простой способ зашифровать / расшифровать строку с помощью ключа.

что-то вроде:

key = '1234'
string =  'hello world'
encrypted_string = encrypt(key, string)
decrypt(key, encrypted_string)

Я не мог найти ничего простого, чтобы сделать это.

Ответы [ 5 ]

24 голосов
/ 05 августа 2012

pyDES - это реализация DES и Triple-DES, полностью написанная на python.

Вот простой и переносимый пример, который должен быть достаточно безопасным для базового шифрования строк. Просто поместите модуль 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"
23 голосов
/ 28 сентября 2010

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'
10 голосов
/ 03 января 2013

для Python 2, вы должны использовать keyczar http://www.keyczar.org/

для Python 3, пока не доступен keyczar, я написал simple-crypt http://pypi.python.org/pypi/simple-crypt

Я отвечаю на два года позже, так как все изменилось с тех пор, как был задан вопрос.

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

1 голос
/ 03 июня 2014

Чтобы расширить ответ 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'))
1 голос
/ 25 октября 2013

Самый простой и быстрый способ зашифровать фрагмент короткого текста с помощью предварительно обработанного ключа - это использовать одну из функций криптохеша (md5, sha и т. Д.).

то есть calc md5 вашего ключа, затем скопируйте фрагмент строки с помощью этого хеша md5.если вам нужно кодировать фрагменты текста длиннее, чем длина md5, выполните md5 (хэш md5) и зашифруйте следующий фрагмент.

Безопасность этого решения хуже, чем с 3-DES, но в среднем достаточно (т.е. для храненияне очень безопасный пароль в конфигурационном файле), и он не требует ничего, кроме базового дистрибутива Python.

Если вам нужна лучшая защита - ищите одну из реализаций AES, Blowfish и т. д., но чтобы действительно выиграть от AES, вам нужнопроделайте дополнительную работу, чтобы смешать ваши данные со случайными.

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