标签: pycryptodome

什么是pycryptodomex,它与pycryptodome有何不同?

今天我看到PySNMP安装了pycryptodomex.这个x名字看起来很可疑而且令人惊讶.

我试图追踪它,但看起来pycryptodomepycryptodomex都归同一个帐户所有并指向同一个Github存储库.

特别是因为加密库是核心安全功能,我怀疑是重复.

这种重复的目的是什么?我可以从公开来源发现这些信息吗?

python fork pycryptodome

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

RSA在python中用私钥对字符串进行签名

我正在与我们的客户端服务器通信。对于 api,我需要用我的私钥签署一个字符串。他们必须遵循以下条件

  1. 用户SHA 256算法计算字符串的哈希值
  2. 使用私钥和 RSA (PKCS1_PADDING) 算法对哈希值进行签名。
  3. Base64编码加密的Hash值

我正在做以下事情

from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
import base64


pkey = RSA.importKey(keystring)

message = "Hello world"

h = SHA256.new(message.encode())
signature = PKCS1_v1_5.new(pkey).sign(h)
result = base64.b64encode(signature).decode()
Run Code Online (Sandbox Code Playgroud)

在这里我得到一个字符串作为结果。但在服务器端我的签名不匹配。

我有什么问题吗?谁可以帮我这个事 ?

python cryptography rsa pycrypto pycryptodome

7
推荐指数
1
解决办法
1万
查看次数

Pycryptodome RSA 解密导致大量性能降级 (RPS)

我正在测试我的 Flask 应用程序端点并在一台机器上测量性能。该特定端点有一个名为decrypt_request. 这个装饰器的实现看起来像这样:

1. Read X-Session-Key header (encrypted by public key)
2. Import RSA key
3. Create a cryptor and decrypt the session key (RSA)
4. Read data from the request body (which is encrypted by the above session key)
5. Decrypt the request body using the session key (AES)
Run Code Online (Sandbox Code Playgroud)

端点看起来像这样:

@app.route('/test', methods=['POST'])
@decrypt_request
def view_function():
    # do something here
Run Code Online (Sandbox Code Playgroud)

在执行一些负载测试后,我发现平均 RPS 大约为 50(这绝对不好,但目前硬件资源受到限制)。我做的一件事是禁用装饰器,我发现 RPS 大幅增加(大约 500 RPS)。最后,我刚刚从装饰器中注释掉了公钥操作,即:我希望标头中有一个干净的会话密钥,并且只执行 AES 操作。RPS 再次以 500 RPS 左右的速度着陆。这表明公钥操作非常缓慢。Pycryptodome …

python pycryptodome

6
推荐指数
1
解决办法
257
查看次数

从 OpenSSL AES 在 python 中解密 AES CBC

我需要使用 python 解密在 OpenSSL 上加密的文件,但我不了解 pycrypto 的选项。

这是我在 OpenSSL 中所做的

  1. openssl enc -aes-256-cbc -a -salt -pbkdf2 -iter 100000 -in "clear.txt" -out "crypt.txt" -pass pass:"mypassword"

  2. openssl enc -d -aes-256-cbc -a -pbkdf2 -iter 100000 -in "crypt.txt" -out "out.txt" -pass pass:"mypassword"

我试过了(这显然行不通)

obj2 = AES.new("mypassword", AES.MODE_CBC)
output = obj2.decrypt(text)
Run Code Online (Sandbox Code Playgroud)

我只想在python中做第二步,但是在查看示例时:

https://pypi.org/project/pycrypto/

obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
obj2.decrypt(ciphertext)
Run Code Online (Sandbox Code Playgroud)

我不需要IV,我如何指定盐?pbkdf2 哈希?我也在看这个线程

如何在 Python 中解密 OpenSSL AES 加密的文件?

但没有帮助。

有人可以告诉我如何使用 python 做到这一点吗?

谢谢你。

python encryption openssl pycrypto pycryptodome

6
推荐指数
1
解决办法
1391
查看次数

Pycryptodome 官方示例不清楚

我对https://www.pycryptodome.org/en/latest/src/examples.html#encrypt-data-with-rsa有疑问

from Crypto.PublicKey import RSA
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES, PKCS1_OAEP

file_out = open("encrypted_data.bin", "wb")

recipient_key = RSA.import_key(open("receiver.pem").read())
session_key = get_random_bytes(16)

# Encrypt the session key with the public RSA key
cipher_rsa = PKCS1_OAEP.new(recipient_key)
file_out.write(cipher_rsa.encrypt(session_key))

# Encrypt the data with the AES session key
cipher_aes = AES.new(session_key, AES.MODE_EAX)
ciphertext, tag = cipher_aes.encrypt_and_digest(data)
[ file_out.write(x) for x in (cipher.nonce, tag, ciphertext) ]
Run Code Online (Sandbox Code Playgroud)

它说我应该使用cipher.nonce,但cipher在示例中未定义。我应该使用

cipher = AES.new(key, AES.MODE_EAX)
cipher = AES.new(key, AES.MODE_EAX, nonce)
Run Code Online (Sandbox Code Playgroud)

或者是其他东西?我押注于 …

python cryptography python-3.x pycryptodome

5
推荐指数
1
解决办法
5761
查看次数

pycryptodome:MAC检查失败(使用decrypt_and_verify)

我正在 Python 3.6 中使用 Pycryptodome 开发一个加密程序 我试图加密一个文件,然后解密它并验证 MAC 标签。当我验证它时,会抛出错误

import os
from Crypto.Cipher import AES
Run Code Online (Sandbox Code Playgroud)

围脖 Cryptodome 进口

aad = b'any thing'
nonce = b'\xde\xe2G\xca\xe8Lq9\xeb\x8b\x84\xe7'
key = b'\xde\xe9\xad\xe9\x14_\x07\x1aq7C\\\xd7\x9c\xae\xfcJ\x1c%\xec\xe6C\xbe\xf0eO\xfaJ1\x08\x0c\xae'
Run Code Online (Sandbox Code Playgroud)

我将随机数和密钥设置为常量只是为了首先开始工作。然后我将为每个文件使用唯一的 nonce = get_random_bytes(12) 。

def encrypt(filename):
    chunksize = 64 * 1024
    outputFile = "(encrypted)" + filename
    filesize = str(os.path.getsize(filename))
    cipher = AES.new(key, AES.MODE_GCM, nonce)
    cipher.update(aad)
    with open(filename, 'rb') as infile:
        with open(outputFile, 'wb') as outfile:
            outfile.write(filesize.encode('utf-8'))

            while True:
                chunk = infile.read(chunksize)

                if len(chunk) == 0:
                    break
                elif len(chunk) % 16 != …
Run Code Online (Sandbox Code Playgroud)

cryptography aes python-3.x aes-gcm pycryptodome

5
推荐指数
1
解决办法
2805
查看次数

AES会话密钥的RSA解密失败,出现'AttributeError:'bytes'对象没有属性'n'

我正在使用Python 3.6上的PyCryptodome实现公钥加密.当我尝试创建对称加密密钥并加密/解密变量时,一切正常.但是,在我介绍RSA(和PKCS1_OAEP)的那一刻,它一切顺利 - session_key加密很好但是当我尝试解密它时,我收到以下错误:

Traceback (most recent call last):
  File "enctest.py", line 109, in <module>
    deckey = decrypt_val(enckey)
  File "enctest.py", line 77, in decrypt_val
    session_key = cipher.decrypt(ciphertext)
  File "/usr/lib/python3.6/site-packages/Crypto/Cipher/PKCS1_OAEP.py", line 187, in decrypt
    modBits = Crypto.Util.number.size(self._key.n)
AttributeError: 'bytes' object has no attribute 'n'
Run Code Online (Sandbox Code Playgroud)

我的代码如下.任何人都可以看看,告诉我我做错了什么?

from Crypto.Cipher import AES, PKCS1_OAEP
from Crypto.PublicKey import RSA
from Crypto import Random
from Crypto.Random import get_random_bytes

random_generator = Random.new().read
keys = RSA.generate(1024, random_generator)
pubkey = keys.publickey()
privkey = keys.exportKey()
pubcipher = PKCS1_OAEP.new(pubkey) # ciphertext …
Run Code Online (Sandbox Code Playgroud)

python encryption cryptography python-3.x pycryptodome

4
推荐指数
1
解决办法
3100
查看次数

PyCryptodome 错误:MAC 检查失败

我正在使用 Python 3 中的 Pycryptodome 开发加密程序。我正在尝试加密(字节)字符串,然后对其进行解密并验证 MAC 标签。当我验证它时,会抛出一个错误。

这是代码:

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

aes_key = get_random_bytes(24)
aes_cipher = AES.new(aes_key, AES.MODE_GCM)
encrypted, MACtag = aes_cipher.encrypt_and_digest(b"A random thirty two byte string.")

# Imagine this is happening somewhere else
new_aes_cipher = AES.new(aes_key, AES.MODE_GCM, nonce=aes_cipher.nonce)
new_aes_cipher.verify(MACtag)
decrypted = new_aes_cipher.decrypt(encrypted)
Run Code Online (Sandbox Code Playgroud)

这是错误:

Traceback (most recent call last):
  File "aespractice.py", line 10, in <module>
    new_aes_cipher.verify(tag)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/Crypto/Cipher/_mode_gcm.py", line 441, in verify
    raise ValueError("MAC check failed")
ValueError: MAC check failed
Run Code Online (Sandbox Code Playgroud)

我查看了文档,在我看来一切都很好。为什么你认为这个程序会这样?任何帮助,将不胜感激。

python encryption cryptography pycrypto pycryptodome

4
推荐指数
1
解决办法
3484
查看次数

ImportError:无法从“Crypto.PublicKey”导入名称“RSA”

您好,我正在尝试将我的 python 脚本连接到 google firebase。我在安装 Pyrebase 时遇到了一些问题。当我使用 pip installpyrebase 安装时,出现以下错误消息:

图1:

在此输入图像描述

不过我尝试了几种方法来解决这个问题,一种方法是通过 pip installpyrebase4 进行安装。安装会顺利进行,但是当我去编写导入语句 importpyre base 时,我会收到此错误:

图片2:

在此输入图像描述

我还尝试卸载pyrebase4并安装setuptools和gcloud,从中我应该能够pip安装pyrebase。但是它无法构建 pycryptodome 轮。然后它执行此错误:

图3:

在此输入图像描述

谁能帮我安装并运行它,我需要很快完成这里的一个项目,但这个瓶颈确实给我带来了压力

python cloud firebase pycryptodome

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

错误:pycryptodome 的构建轮失败

我试图安装pycryptodomepython-jose-cryptodome使用pipanaocnda3环境。

我收到此错误:

  ERROR: Failed building wheel for pycryptodome
Run Code Online (Sandbox Code Playgroud)

我已经尝试了许多版本的许多解决方案(最新版本,指定版本,使用 python 3.8 或 3.7,使用没有缓存的需求文本,甚至单独安装),但对我来说没有任何效果:(。任何解决方案?

python pip anaconda pycryptodome

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