- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个程序,该程序使用 socket 模块在 python 中通过互联网传输数据。我现在正在尝试使用 pycryptodome 模块实现加密。我正在使用 Salsa20 传输普通消息并传输我正在使用 RSA 的 Salsa20 key 。问题是代码在验证散列时引发了 ValueError。这是协议(protocol):
我反复检查打印,hash都是一样的。 socket 不是问题。
recv_message 和 send_message 函数是我用来打包发送和接收协议(protocol)的函数。在程序中,套接字是预先设置好的,所以这里是服务器的重要部分。
import socket
from Crypto.Cipher import Salsa20, PKCS1_OAEP
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
def send_message(message_to_send, connection):
if type(message_to_send) is bytes:
message = message_to_send
else:
message = str(message_to_send).encode()
length_of_msg = str(len(message))
length_of_msg = ('0' * (5-len(length_of_msg))) + length_of_msg # This part is adding zeros as padding so that the first message is always 5 chars
connection.send(length_of_msg.encode())
connection.send(message)
def recv_message(connection, no_decode=False):
length_of_msg = int(connection.recv(5))
message = connection.recv(length_of_msg)
if not no_decode:
message = message.decode('utf-8')
return message
def get_key(connection):
rsa_server_key = RSA.generate(2048)
send_message(rsa_server_key.publickey().exportKey(), connection)
rsa_client_key = RSA.import_key(recv_message(connection, no_decode=True))
key_signed = recv_message(connection, no_decode=True)
key_unsigned = recv_message(connection, no_decode=True)
hash_verify = pkcs1_15.new(rsa_client_key)
hash_verify.verify(SHA256.new(data=key_unsigned), key_signed)
rsa_cipher = PKCS1_OAEP.new(rsa_server_key)
key = rsa_cipher.decrypt(key_unsigned)
return key
客户端具有相同的套接字相关功能和导入模块。
def share_key(key_to_send, connection):
rsa_server_key = RSA.import_key(recv_message(connection, no_decode=True))
rsa_client_key = RSA.generate(2048)
send_message(rsa_server_key.publickey().exportKey(), connection)
rsa_cipher = PKCS1_OAEP.new(rsa_server_key)
salsa_key_unsigned = rsa_cipher.encrypt(key_to_send)
key_signer = pkcs1_15.new(rsa_client_key)
send_message(key_signer.sign(SHA256.new(data=salsa_key_unsigned)), connection)
send_message(salsa_key_unsigned, connection)
回溯是:
Traceback (most recent call last):
File "0,9Serverside.py", line 686, in <module>
main()
File "0,9Serverside.py", line 670, in main
key_input = get_key(server)
File "0,9Serverside.py", line 243, in get_key
hash_verify.verify(SHA256.new(data=salsa_key_unsigned), salsa_key_signature)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/Crypto/Signature/pkcs1_15.py", line 139, in verify
raise ValueError("Invalid signature")
ValueError: Invalid signature
您认为验证无效的原因可能是什么。感谢您的帮助。
最佳答案
客户端发回服务器的公钥而不是自己的公钥。线路:
send_message(rsa_server_key.publickey().exportKey(), connection)
应该是:
send_message(rsa_client_key.publickey().exportKey(), connection)
关于python - PyCryptodome RSA 签名和验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48601182/
我对 https://www.pycryptodome.org/en/latest/src/examples.html#encrypt-data-with-rsa 有疑问 from Crypto.Pu
为什么cipher3无法解密密码数据? cipher2 和 cipher3 使用相同的随机数,但 cipher3 无法解密数据 代码: >>> from Crypto.Cipher import AE
我尝试使用 pycryptodome 在 Python 中实现 RSA,加密工作正常,但解密功能不行,我的代码如下: from Crypto.PublicKey import RSA from Cry
我正在开发一个程序,该程序使用 socket 模块在 python 中通过互联网传输数据。我现在正在尝试使用 pycryptodome 模块实现加密。我正在使用 Salsa20 传输普通消息并传输我正
起因 前端日子写完的Python入库脚本,通过直接读取配置文件的内容(包含了数据库的ip,数据库的用户名,数据库的密码),因为配置文件中的数据库密码是明文显示的,所以不太安全,由此对其进行加密。
我正在测试我的 flask 应用程序端点并测量单台机器上的性能。该特定端点有一个名为 decrypt_request 的装饰器。 .这个装饰器的实现如下所示: 1. Read X-Session-Ke
我正在尝试安装 Pyrebase,但我不断收到错误,我认为该错误是由 pycryptodome 的 setup.py 引起的。我到处搜索但找不到解决方案,有人知道如何解决这个问题吗? 我的输出如下 -
我正在尝试使用 Pycryptodome (3.7.0) 在 Python (2.7.14) 中使用 CBC 模式对 AES 中的简单文本进行加密和解密 这是我尝试加密的代码: from Crypto
我需要修复基于 PyCryptodome 的客户端/服务器交互。 客户端生成其 RSA key 并将公共(public) key 发送到服务器: n_bin_size = 1024 e = 65537
我试图安装 pycryptodome , python-jose-cryptodome使用 pip在 内anaocnda3 环境。 我收到了这个错误: ERROR: Failed building
作为对此的一些上下文,我正在将 java 文件转换为 python,并且正在执行最后一个操作。我的位置大约是 200 LOC,所以这使得它更加边缘化...... 无论如何,在java中的操作是: Ci
我正在使用 Python 3 中的 Pycryptodome 开发一个加密程序。我正在尝试加密一个(字节)字符串,然后对其进行解密并验证 MAC 标记。当我去验证它时,抛出了一个错误。 这是代码: f
我正在使用混合加密(RSA+AES),但长度很大,现在我想使用 ECC 而不是 RSA,但在 pycryptodom 中没有实现。这是我的 RSA 代码 def generate_keys():
今天看到PySNMP安装了pycryptodomex。该名称中的 x 看起来可疑且令人惊讶。 我试图追踪它,但看起来 pycryptodome 和 pycryptodomex 都属于同一个帐户并指向
我有数百个 PDF 需要设置密码。我尝试使用 pyPDF2 来执行此操作,但出现错误:“DependencyError:AES 算法需要 PyCryptodome”。 我尝试用谷歌搜索 pikepdf
在运行测试以确保两个不同的库提供相同的输出时,我发现它们不使用 CFB。复制问题的代码是: from cryptography.hazmat.backends import default_backe
出于安全考虑,我们正在从 pycryptodome 转向加密。当使用 pycryptodome 编码相同的纯文本字符串时,我得到了与加密不同的密文,请考虑以下代码: Pycryptodome:
我正在使用 RSA 对 SHA512 哈希进行签名并将其保存到文件中。 python 和 javascript 上的哈希值相同,但无法验证签名。 Python代码: from Cryptodome.H
我目前正在尝试使用 AES 密码术来加密和解密长度始终为 9 个字符的字符串。我想做的是用 swift 加密字符串,然后用 python 解密加密的字符串。我正在使用 CryptoSwift 进行 A
以下代码每次执行时都会生成不同的密文,这不应该发生,因为每次执行传递的 key 和数据都是相同的。 from Crypto.Cipher import AES from Crypto.Util.Pad
我是一名优秀的程序员,十分优秀!