问题标签 [pycryptodome]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
354 浏览

python - BigQuery - AES_DECRYPT GCM - 无法使用长度为 32 的密​​钥解密密文

我正在尝试使用 AES GCM 将加密数据存储在 BigQuery 中。

数据使用 Python 的 Cryptodome 库进行加密。

这是代码

密钥和密文的输出示例将是:

在 python 中,数据被很好地解密,但在返回的 bigquery 中没有:

这是查询:

知道我做错了什么吗?

0 投票
0 回答
458 浏览

python - 每次用户要加密一个新文件时,我是否应该生成一个新的 RSA 密钥对?

我正在做一个项目,我将在其中加密一些文件。我已经实现了 AES 功能,现在我正在实现 RSA 部分。在 AES 部分,每次我要加密一个新文件时,我都会创建一个新密钥,即使密码是相同的,使用不同的盐也是如此。为了恢复上述密码,我需要将一个已知的密码和盐散列在一起。我应该对 RSA 公钥和私钥做同样的事情吗?如果是这样,我可以将我在 AES 密钥上使用的方法应用于 RSA 密钥吗?或者我的方法应该不同吗?

这就是我生成 RSA 密钥的方式:

这就是我处理加密/解密过程的方式:

0 投票
1 回答
466 浏览

python-3.x - 试图理解 Python 的 AES 方法

我希望,使用 Python3 的 Crypto.Cipher 在 CTR 模式下使用 AES。实际问题是我有一个二进制数字数组(字符串格式的“0/1”),并且我希望使用 AES-CTR 加密/解密它们。查看本文后我尝试开发下面附加的代码。

期待看到如下内容:

Hello World > 2bytes > " b'Hello World' > 加密 > #JibberishText# > 解密 > b'Hello World' > Hello World

本次运行的实际结果是:

Hello World > 2bytes > b'Hello World' > 加密 > b'\x8eo\xfc`\xeck\xcf\r4\x1fS' > 解密 > b'\xc7\x93\x8a\x1dK\xad\xc5\x9d8\x9c \x18'

另外:如果我不注释掉最后几行,我会收到以下错误:

文件“aes.py”,第 25 行,在 decrypted_msg = decrypted_bytes_msg.decode() UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte

你能帮我理解模块的使用方法吗?

0 投票
1 回答
1278 浏览

python - ValueError:长度不正确的密文

我有一个问题:“假设你的 RSA 公钥因子是 p = 6323 和 q = 2833,公共指数 e 是 31。假设你收到了密文 6627708。编写一个将上述参数作为输入的程序并实现了RSA解密功能来恢复明文。”

尝试解密密文时,我收到错误消息:

我的代码目前看起来像:

我想知道更多,如果我在正确的轨道上,或者完全偏离轨道。我不太确定如何解决长度错误。我在想也许我需要像 AES 一样填充,但我不太确定。在此先感谢您的帮助!

0 投票
1 回答
188 浏览

python - 使用故意弱私钥解密消息无限期挂起

我在从已被故意削弱的私钥生成公钥时遇到问题,并在使用 PyCryptoDome 时尝试加密/解密消息。解密似乎无限期地挂起。

注意:显然这不是我真正的私钥。故意削弱以下键:

以下片段用于读取私钥、派生公钥、加密消息然后再次解密:

这似乎在调用时挂起decryptMsg()

0 投票
2 回答
706 浏览

python - PyCryptodome 的 RSA 加密问题

我需要修复基于 PyCryptodome 的客户端/服务器交互。

客户端生成其 RSA 密钥并将公共密钥发送到服务器:

服务器获取私钥并使用它来加密会话密钥:

session_key 实际上是正确加密的,但总是会引发 AttributeError 异常,并带有以下消息:

有可能解决这个问题吗?

更新:有一个类似的问题,在:

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

但是这个问题的答案并不能解决我的问题。当然,如果我使用“完整”RsaKey 对象而不是公钥 RsaKey 对象,则不会引发异常,但我认为将“完整”RsaKey 对象发送到服务器是错误的,不是吗?

0 投票
1 回答
88 浏览

json - Python 2.7,Pycryptodome:由于编码问题,无法在服务器端验证私钥签名

我使用客户端的 Python 请求模块功能和服务器端的 Flask 服务器在两个节点之间发送 Json 格式的数据。我需要使用 RSA 私钥对 Python 2.7 字符串“某个字符串”进行数字签名,并验证服务器端的签名。为此,我选择了 Pycryptodome 模块。不幸的是, json.dumps() [来自 Json Python 模块] 要求将字符串的签名哈希从 Pycryptodome 的“pss”签名函数输出的形式(字节字符串)转换为 unicode 字符串——json 需要 unicode: 如何在 JSON 中编码字节?json.dumps() 抛出 TypeError

我正在使用 base 64 模块的 base64.b64encode() 函数将数字签名转换为 json.dumps() 可以处理的形式——在 jsonoficatoin 之前将签名与其他一些东西一起放入 python 字典中——并解码使用 base64.b64decode 的服务器端,希望取回可由 Pycryptodome 的 verify() 函数处理的字节字符串。

...

不幸的是,我遇到了类型错误:

raise TypeError("Object type %s cannot be passed to C code" % type(data)) TypeError: Object type <type 'unicode'> cannot be passed to C code 我错过了什么?谢谢你

0 投票
1 回答
4447 浏览

python - 如何在 Windows 上安装 Splunklib for Python 3.7?

Splunklib因为Python 3.7无法在我的 Windows 机器上安装。由于pycrypto未移植到Python 3,我已将其卸载并安装pycrypodome为替换。不幸的是,在尝试安装时splunklibpip仍然尝试安装pycrypto.

有没有办法强制Pythonpip使用pycryptodome代替pycrypto

0 投票
1 回答
839 浏览

python - How to convert a byte string into a list of tuples?

I'm using the pycryptodome module and its AES functionality to encrypt some data. However I need to generate a key for the AEScipher that I can later retrieve. The project stores all private data (including keys) in the form of an image. Basically we use an array of pixels and create the image using PIL and retrieve the pixel_list using the getdata() function.

To create the image:-

Note that pixels is a list of list of tuples of integers [[(...), (...)], [(...), (...)], ...] and this is the object that carries keys To get keys from the image:-

Now I'm not able to directly store the AES key, assuming I generate it with Random.get_random_bytes(AES.key_size) from the Crypto module.

How can I generate a cryptographically secure key but also retrieve it by using one of the keys in pixels, as in a tuple of integers?

Edit:-

To elaborate, the pixels object is a list of list of tuples of integers, each tuple contains 3 integers and each integer can range from 0 to 255. The 0th index of the pixels object may look like this- [(69, 147, 245), (120, 212, 198), ...] The key_list object I'm referring to is actually list(im.getdata()). This is a list of tuples of integers, each tuple contains 3 integers and each integer can range from 0 to 255. This looks like this- [(69, 147, 245), (120, 212, 198)....] Hence, the 0th index of key_list will be (69, 147, 245)

I need to store the AES key on par with these values. I'd ideally like to store the AES key as a tuple of 3 integers ranging from 0 to 255. So yes, I need to convert the AES key into a tuple and then store it in pixels.

One more key detail, the tuples contain 3 integers because they represent the RGB values respectively to create the image. I believe the tuple can be made with 4 integers as well to represent RGBA values. So that will solve the multiple of 3 problem.

But there's another problem. Each tuple in pixels is actually generated through [i for i in itertools.product(range(256), repeat=3)]. In order to generate a tuple of 4 integers instead of 3 I'll have to change repeat=3 to repeat=4, this will raise MemoryError.

0 投票
1 回答
479 浏览

json - 为什么在加密和解密 JSON 文件时 Pycryptodome MAC 检查失败?

我正在尝试使用散列密码作为密钥来加密一些JSON数据。我想将数据存储在一个文件中,能够加载、解密、更改、加密、存储和重复。AES-256pbkdf2_sha256

我正在使用passlibpycryptodomepython 3.8。以下测试发生在 docker 容器内并引发我无法纠正的错误

有没有人知道如何改进我的代码(和知识)?

测试.py:

输出:

研究:

  • 调查了这个答案,但我相信我的verify()电话是在正确的地方

  • 我注意到在 python 文档中,它说:

    load(dumps(x)) != x 如果 x 有非字符串键。

    但是,当我重新运行测试时,dictTest['test'] = 'a'我遇到了同样的错误。

  • 我怀疑问题出在 json 格式上,所以我用一个字符串做了同样的测试,没有进行json.loadsandjson.dumps调用,但我有同样的错误