如何使用密钥加密字符串

时间:2009-08-24 06:00:00

标签: python encryption

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

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

6 个答案:

答案 0 :(得分:7)

我的博客文章(John Boker的答案中的passingcuriosity.com链接)使用M2Crypto库进行AES(对称加密算法)。 M2Crypto是围绕OpenSSL的Python包装器。 API几乎是将OpenSSL直接翻译成Python的,所以稍微粗略的文档不应该是一个太大的问题。如果M2Crypto支持您需要使用的公钥加密算法,那么您可以很好地使用它来进行公钥加密。

我发现M2Crypto test suite是使用其API的有用示例。特别是,RSA(在test_rsa.py中),PGP(在test_pgp.py中)和EVP(在test_evp.py中)测试将帮助您弄清楚如何设置和使用库。请注意它们是单元测试,因此确切地确定哪些代码是必要的以及什么是测试的假象可能有点棘手。

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

实施例

from M2Crypto import RSA

rsa = RSA.load_pub_key('rsa.pub.pem')
encrypted = rsa.public_encrypt('your message', RSA.pkcs1_oaep_padding)
print encrypted.encode('base64')

输出

X3iTasRwRdW0qPRQBXiKN5zvPa3LBiCDnA3HLH172wXTEr4LNq2Kl32PCcXpIMxh7j9CmysLyWu5
GLQ18rUNqi9ydG4ihwz3v3xeNMG9O3/Oc1XsHqqIRI8MrCWTTEbAWaXFX1YVulVLaVy0elODECKV
4e9gCN+5dx/aG9LtPOE=

答案 1 :(得分:3)

以下是演示如何使用M2Crypto($ easy_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/TGLAqALihw7183E2effp9ALYfu8azYEPwMpjbw9nVSwJ4VvX3TBa4V0HAU
n6x3xslvOnegv8dv3MestEcTH9b3r2U1rsKJc1buouuc+MR77Powj9JOdizQPT22HQ2VpEAKFMK+
8zHbkJkgh4K5XUejmIk=

disregard the -man- (I mean file) behind curtain

答案 2 :(得分:1)

从我最近的python经验来看,python本身不进行加密。您需要使用外部(第三方)包。显然,这些中的每一个都提供了不同的体验。你在用哪个?这可能会决定您的语法将如何变化。

答案 3 :(得分:0)

答案 4 :(得分:0)

你有没有听说过“RSAError:数据对于密钥大小来说太大了”?

尝试使用更长信息的样本:

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)

答案 5 :(得分:-3)

您可以使用MD5或SHA1哈希以及密钥...