相关疑难解决方法(0)

在PKCS#1 OAEP加密/解密中交换公钥/私钥

我对RSA只有一些非常基本的理论知识.

在阅读关于如何在实践中使用它的不同来源时,似乎PKCS#1 OAEP将是一件好事.

对于测试实现,我使用Python和PyCrypto.例如,是使用PKCS#1 OAEP的示例.

使用公钥加密然后使用私钥解密工作正常.例如,公众可以使用私钥向人X发送一些数据.

根据我对RSA如何工作的基本理解,我认为我可以交换公钥/私钥,即我可以使用公钥进行加密,使用私钥进行解密.例如,人X可以使用自己的私钥加密某些数据,公众可以使用公钥对其进行解密.如果解密工作正常,则可以提供某种证据证明数据来自人X.

当我尝试使用公钥解密时,PyCrypto会抱怨.

通过阅读PyCrypto源代码,在_RSAKey._decrypt函数(这里)中,似乎关键对象本身知道它是私钥还是公钥并且它们之间有所不同(令我惊讶的是,再次基于我非常基本的RSA理解).

从那里,看起来我可以破解解密功能,以便它使用公钥.或者有些不同:我可以在关键对象中交换公共指数e和私有指数d.

但所有这些似乎并不打算以这种方式使用/攻击.所以我想问一下我的误解.

另外,出于好奇,我生成了一些键(RSA.generate(2048))并查看n,e并且d.在所有情况下,n并且d非常巨大,而e在所有情况下都是恒定的(65537)(我不会预期).

我想从这一切我不应该只是交换ed.

所以我想我应该使用其他方法进行签名,如PKCS1_PSS.


加密/解密的一些代码,如果有人有兴趣:

def randomString(l):
    import random
    return ''.join(chr(random.randint(0, 0xFF)) for i in range(l))

def genkeypair():
    from Crypto.PublicKey import RSA
    key = RSA.generate(2048)
    pubkey = key.publickey().exportKey("DER")
    privkey = key.exportKey("DER")
    return (pubkey,privkey)

def encrypt(v, rsapubkey):
    from Crypto.PublicKey import RSA …
Run Code Online (Sandbox Code Playgroud)

encryption cryptography rsa public-key-encryption

9
推荐指数
1
解决办法
5851
查看次数

如何在python中使用RSA私钥加密?

是否可以使用pycryptodome或任何其他库在python中使用私钥对消息进行加密?我知道您不应该使用私钥进行加密,而不能使用公钥进行解密,但是我的目的是使用私钥进行加密,以便接收者可以确定邮件是由真实作者发送的。除了寻找安全加密以外,我还在寻找某种模糊处理。我想做一个消息公开的应用程序,但是只有拥有公共密钥才能看到。我试图做到这一点:

from Crypto import Random
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64


def generate_keys():
    modulus_lenght = 256 * 4
    private_key = RSA.generate(modulus_lenght, Random.new().read)
    public_key = private_key.publickey()
    return private_key, public_key

def encrypt_private_key(a_message, private_key):
    encryptor = PKCS1_OAEP.new(private_key)
    encrypted_msg = encryptor.encrypt(a_message)
    encoded_encrypted_msg = base64.b64encode(encrypted_msg)
   return encoded_encrypted_msg

def decrypt_public_key(encoded_encrypted_msg, public_key):
    encryptor = PKCS1_OAEP.new(public_key)
    decoded_encrypted_msg = base64.b64decode(encoded_encrypted_msg)
    decoded_decrypted_msg = encryptor.decrypt(decoded_encrypted_msg)
    return decoded_decrypted_msg

private_key, public_key = generate_keys()

message = "Hello world"

encoded = encrypt_private_key(message, private_key)
decoded = decrypt_public_key(encoded, public_key)

print decoded
Run Code Online (Sandbox Code Playgroud)

但这会引发下一个错误:TypeError:这不是私钥。

python rsa encryption-asymmetric public-key private-key

3
推荐指数
1
解决办法
9383
查看次数