RSA与AES 128

时间:2018-11-01 21:54:14

标签: python aes rsa pycrypto

这是我的协议:

加密和签名-用户A

  1. 使用用户B的公钥进行密码
  2. 用私钥A签名加密的消息

验证和解密-用户B

  1. 使用公钥A验证签名
  2. 使用私钥B解密邮件

私钥A和B相同(128位)

我想在CBC模式下使用带有AES的此协议发送文本,因此我创建了此代码,但在签名中不能正常工作,

bytes object has no attribute n

代码如下:

    def firmar(self, datos):

        try:
            h = SHA256.new(datos)

            signature = pss.new(self.keyprivada).sign(h)
            return signature
        except (ValueError, TypeError):
            return None

    def comprobar(self, text, signature):

        h = SHA256.new(text)

        print(h.hexdigest())
        verifier = pss.new(self.keypublica)
        try:
            verifier.verify(h, signature)
            return True
        except (ValueError, TypeError):
            return False

1 个答案:

答案 0 :(得分:0)

此部分不再适用,因为代码已更改

<罢工> 首先,您使用的是欧洲央行,由于文本与其输出之间的关系是恒定的,因此这是不安全的。

其次,CBC需要IV,因此需要不同的实现方式。

最后也是最关键的:

AES是 NOT 一种非对称加密算法

表示必须使用相同的密钥对其进行加密和解密。您可以像使用非对称加密方法一样使用公钥和私钥。

替代方法:

如果您要正确实现RSA ,则可以生成一个随机字节数组并将其用作密钥,然后将其加密发送给接收者以解密并使用它作为解密aes的密钥,因为它是相同的。

现在:

您使用私有密钥对数据进行签名... RSA要求您使用公共密钥(现在为私有-未分发)对其进行加密,但是您无法使用公共密钥对使用私有密钥加密的内容进行解密。取而代之的是,您分发“私钥”进行解密,并保留“公钥”进行加密,因此没有其他人可以对数据进行加密或签名。

你在做什么!

公钥和私钥之间有关系!您不能只使用随机字节数组。

阅读Wikipedia文章。