Python 如何使用密钥加密字符串

Python 如何使用密钥加密字符串,python,encryption,Python,Encryption,我在一个名为varkey的变量中有一个“公钥”,为了获取公钥,我使用了urllib并将该公钥存储在一个变量中。现在我想用公钥加密一个msg/字符串 如果有人能带我去图书馆,那没关系。你可能想看看: 还是这个 您可以在密钥中使用MD5或SHA1哈希…根据我最近的python经验,python并不是本机进行加密的。您需要使用外部(第三方)软件包。很明显,每一种都提供了不同的体验。你用哪一种?这可能会决定语法的变化。我的博客文章(John Boker回答中的passingquistion.com链接

我在一个名为varkey的变量中有一个“公钥”,为了获取公钥,我使用了urllib并将该公钥存储在一个变量中。现在我想用公钥加密一个msg/字符串


如果有人能带我去图书馆,那没关系。

你可能想看看:

还是这个


您可以在密钥中使用MD5或SHA1哈希…

根据我最近的python经验,python并不是本机进行加密的。您需要使用外部(第三方)软件包。很明显,每一种都提供了不同的体验。你用哪一种?这可能会决定语法的变化。

我的博客文章(John Boker回答中的passingquistion.com链接)使用M2Crypto库执行AES(一种对称加密算法)。M2Crypto是围绕OpenSSL的Python包装器。API几乎是OpenSSL到Python的直接翻译,因此有些粗略的文档应该不会有太大问题。如果M2Crypto支持您需要使用的公钥加密算法,那么您完全可以使用它来进行公钥加密

我发现这是一个使用其API的有用示例。特别是,RSA(在test_RSA.py中)、PGP(在test_PGP.py中)和EVP(在test_EVP.py中)测试将帮助您了解如何设置和使用库。一定要知道它们是单元测试,所以弄清楚什么代码是必需的,什么是测试的人工制品可能有点棘手

PS:因为我是新手,我的帖子只能包含一个链接,所以我不得不删除其中的大部分。对不起

例子 输出 X3iTasRwRdW0qPRQBXiKN5zvPa3LBiCDnA3HLH172wXTEr4LNq2Kl32PCcXpIMxh7j9CmysLyWu5 GLQ18rUNqi9ydG4ihwz3v3xeNMG9O3/OC1XSHQQIRI8MRCWTTEBAWAXX1YVULVY0ELODECV 4e9gCN+5dx/aG9LtPOE=
下面的脚本演示了如何使用M2Crypto(
$easy\u install M2Crypto
)加密消息,因为公钥位于
varkey
变量中:

#!/usr/bin/env python
import urllib2
from M2Crypto import BIO, RSA

def readkey(filename):
    try:
        key = open(filename).read()
    except IOError:
        key = urllib2.urlopen(
            'http://svn.osafoundation.org/m2crypto/trunk/tests/' + filename
            ).read()
        open(filename, 'w').write(key)
    return key

def test():
    message = 'disregard the -man- (I mean file) behind curtain'
    varkey = readkey('rsa.pub.pem')
    # demonstrate how to load key from a string
    bio = BIO.MemoryBuffer(varkey)
    rsa = RSA.load_pub_key_bio(bio)
    # encrypt
    encrypted = rsa.public_encrypt(message, RSA.pkcs1_oaep_padding)
    print encrypted.encode('base64')
    del rsa, bio    
    # decrypt
    read_password = lambda *args: 'qwerty'
    rsa = RSA.load_key_string(readkey('rsa.priv2.pem'), read_password)
    decrypted = rsa.private_decrypt(encrypted, RSA.pkcs1_oaep_padding)
    print decrypted
    assert message == decrypted

if __name__ == "__main__":
    test()
输出 gyLD3B6jXspHu+o7M/TGLAQALIHW7183E2EFFP9ALYFU8AZYEPWMPJBW9NVSWJ4VVVX3TBA4V0HAU N6x3xslvonegv8dv3estech9b3r2u1rskjc1buuuc+mr77powj9jodizqpt22hq2vppeakfmk+ 8zHbkJkgh4K5XUejmIk= 无视窗帘后面的那个人(我指的是文件) 您是否听说过“RSA错误:对于密钥大小而言,数据太大”

请使用更长的消息尝试您的示例:

encrypted = rsa.public_encrypt('My blog post (the passingcuriosity.com link in John Boker's answer) does AES -- a symmetric encryption algorithm -- using the M2Crypto library', RSA.pkcs1_oaep_padding)

除非您想自己实现加密(我对此表示怀疑),否则您可能应该寻找一个能够满足您需要的库,并查看它的API文档。这篇文章似乎应该是对投票率最高的答案的评论,而不是单独的文章。也许把它作为一条评论,删除这个“答案”
#!/usr/bin/env python
import urllib2
from M2Crypto import BIO, RSA

def readkey(filename):
    try:
        key = open(filename).read()
    except IOError:
        key = urllib2.urlopen(
            'http://svn.osafoundation.org/m2crypto/trunk/tests/' + filename
            ).read()
        open(filename, 'w').write(key)
    return key

def test():
    message = 'disregard the -man- (I mean file) behind curtain'
    varkey = readkey('rsa.pub.pem')
    # demonstrate how to load key from a string
    bio = BIO.MemoryBuffer(varkey)
    rsa = RSA.load_pub_key_bio(bio)
    # encrypt
    encrypted = rsa.public_encrypt(message, RSA.pkcs1_oaep_padding)
    print encrypted.encode('base64')
    del rsa, bio    
    # decrypt
    read_password = lambda *args: 'qwerty'
    rsa = RSA.load_key_string(readkey('rsa.priv2.pem'), read_password)
    decrypted = rsa.private_decrypt(encrypted, RSA.pkcs1_oaep_padding)
    print decrypted
    assert message == decrypted

if __name__ == "__main__":
    test()
gyLD3B6jXspHu+o7M/TGLAqALihw7183E2effp9ALYfu8azYEPwMpjbw9nVSwJ4VvX3TBa4V0HAU n6x3xslvOnegv8dv3MestEcTH9b3r2U1rsKJc1buouuc+MR77Powj9JOdizQPT22HQ2VpEAKFMK+ 8zHbkJkgh4K5XUejmIk= disregard the -man- (I mean file) behind curtain
encrypted = rsa.public_encrypt('My blog post (the passingcuriosity.com link in John Boker's answer) does AES -- a symmetric encryption algorithm -- using the M2Crypto library', RSA.pkcs1_oaep_padding)