Подтвердить что ты не робот

Простой шифровать/дешифровать lib в python с закрытым ключом

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

somthing like:

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

Я не мог найти ничего простого для этого.

4b9b3361

Ответ 1

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'

Ответ 2

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"

Ответ 3

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

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

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

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

Ответ 4

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

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

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

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

Ответ 5

Чтобы расширить ответ на 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'))