python中使用私钥的简单加密/解密库

python中使用私钥的简单加密/解密库,python,encryption,Python,Encryption,有没有一种简单的方法可以用密钥加密/解密字符串 比如: key = '1234' string = 'hello world' encrypted_string = encrypt(key, string) decrypt(key, encrypted_string) 我找不到任何简单的方法来做那件事。应该做你想做的事 从他们的文档页面中获取 >>> from Crypto.Cipher import DES >>> obj=DES.new('abcdef

有没有一种简单的方法可以用密钥加密/解密字符串

比如:

key = '1234'
string =  'hello world'
encrypted_string = encrypt(key, string)
decrypt(key, encrypted_string)
我找不到任何简单的方法来做那件事。

应该做你想做的事

从他们的文档页面中获取

>>> 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'
>>来自加密密码导入DES
>>>obj=DES.new('abcdefgh',DES.MODE\U ECB)
>>>plain=“Guido van Rossum是一个太空外星人。”
>>>蓝(普通)
34
>>>对象加密(普通)
回溯(最里面的最后一个):
文件“”,第1行,是否在中?
ValueError:DES的字符串长度必须是8的倍数
>>>ciph=对象加密(普通+XXXXXX)
>>>ciph
“\021\343Nq\214DY\337T\342pA\372\255\311s\210\363\300j\330\250\312\347\342I\3215w\03561\303dgb/\006”
>>>对象解密(ciph)
“Guido van Rossum是一个太空外星人。XXXXXX”
是完全用python编写的DES和三重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"
收件人的计算机

>>> 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"

您可能会从收件人计算机的代码中获得
Python3
中的错误

>>> 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"
ValueError:pyDes只能处理编码字符串,不能处理Unicode。

from pyDes import *

a = b')\xd8\xbfFn#EY\xcbiH\xfa\x18\xb4\xf7\xa2'
plain_text = triple_des('a 16 or 24 byte password').decrypt(a, padmode=2)
print(plain_text)

只需在加密文本的开头添加
b
。要获得更清晰的代码,请将其分配给一个新变量(在本例中,它是
a
,并以正常方式解密
a

对于Python2,应使用keyczar

对于Python3,在keyczar可用之前,我已经编写了简单的crypt

我迟了两年才回答这个问题,因为自从提出这个问题以来,情况发生了变化


请注意,前面对这个问题的回答使用弱密码(按照今天的标准),并且没有任何密钥增强。这里的两个建议可能更安全。

使用预发密钥加密短文本片段最简单、最快速的方法是使用一个加密哈希函数(md5、sha等)

i、 e.计算键的md5,然后用这个md5散列对字符串片段进行异或运算。如果需要对长度超过md5的文本片段进行编码,请执行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'))

你已经在谷歌上搜索过RSA和Python了吗?谢谢!我一直在寻找一个纯python加密/解密方案(因此它实际上是可移植的),这是我唯一偶然发现的方案