pycrypto 相关问题

PyCrypto - Python Cryptography Toolkit是一个包含Python编程语言的各种加密模块的包。

无法导入名称“winrandom”

我在运行利用 Paramiko 的代码时遇到问题,并因标题中的错误而中断。 Windows 8.1 上的 PyCrypto for Python 3.4 找不到 winrandom 模块 我已经尝试过这个解决方案,但它确实...

回答 1 投票 0

鉴于最后一块未正确填充。如果在解密过程中使用错误的密钥,可能会出现此类问题 - 使用 pycryptodome 进行 AES 加密

我正在使用以下类进行编码和解码,当将加密字符串直接从加密函数传递到解密函数时,它可以正常工作。但如果我尝试解密

回答 1 投票 0

安装机器模块时无法构建pycrypto

我正在尝试安装机器模块。错误说: 收集机 使用缓存的 machine-0.0.1-py2.py3-none-any.whl (4.2 kB) 收集 pycrypto(从机器) 使用缓存的 pycrypto-2.6.1...

回答 1 投票 0

导入“Crypto.Cipher”无法在 VSCode intel MAC 中解析 Pylance (reportMissingImports)

当我查看文档和其他网站时,我已经安装了我需要的那些。为什么它仍然说找不到我的模块? 这是我的进口 进口插座 随机导入 导入

回答 1 投票 0

.Net 4.7.2 的 AES-256 似乎不正确,是我的用法还是 MS?

客户提供了 C# 示例代码作为加密规范。我的代码是Python 2.7,我必须让我的数据与他们的相匹配。我的数据与在线计算器匹配,但与客户数据不匹配......

回答 1 投票 0

Python 中的 PHP openssl AES

我正在开发一个使用 PHP 解密 AES-256-CBC 消息的项目 我正在开发一个使用 PHP 解密 AES-256-CBC 消息的项目 <?php class CryptService{ private static $encryptMethod = 'AES-256-CBC'; private $key; private $iv; public function __construct(){ $this->key = hash('sha256', 'c7b35827805788e77e41c50df44441491098be42'); $this->iv = substr(hash('sha256', 'c09f6a9e157d253d0b2f0bcd81d338298950f246'), 0, 16); } public function decrypt($string){ $string = base64_decode($string); return openssl_decrypt($string, self::$encryptMethod, $this->key, 0, $this->iv); } public function encrypt($string){ $output = openssl_encrypt($string, self::$encryptMethod, $this->key, 0, $this->iv); $output = base64_encode($output); return $output; } } $a = new CryptService; echo $a->encrypt('secret'); echo "\n"; echo $a->decrypt('S1NaeUFaUHdqc20rQWM1L2ZVMDJudz09'); echo "\n"; 输出 >>> S1NaeUFaUHdqc20rQWM1L2ZVMDJudz09 >>> secret 现在我必须编写 Python 3 代码来加密数据。 我尝试过使用 PyCrypto 但没有成功。我的代码: import base64 import hashlib from Crypto.Cipher import AES class AESCipher: def __init__(self, key, iv): self.key = hashlib.sha256(key.encode('utf-8')).digest() self.iv = hashlib.sha256(iv.encode('utf-8')).digest()[:16] __pad = lambda self,s: s + (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size) __unpad = lambda self,s: s[0:-ord(s[-1])] def encrypt( self, raw ): raw = self.__pad(raw) cipher = AES.new(self.key, AES.MODE_CBC, self.iv) return base64.b64encode(cipher.encrypt(raw)) def decrypt( self, enc ): enc = base64.b64decode(enc) cipher = AES.new(self.key, AES.MODE_CBC, self.iv ) return self.__unpad(cipher.decrypt(enc).decode("utf-8")) cipher = AESCipher('c7b35827805788e77e41c50df44441491098be42', 'c09f6a9e157d253d0b2f0bcd81d338298950f246') enc_str = cipher.encrypt("secret") print(enc_str) 输出 >>> b'tnF87LsVAkzkvs+gwpCRMg==' 但是我需要输出 S1NaeUFaUHdqc20rQWM1L2ZVMDJudz09,它将 PHP 解密为 secret。如何修改Python代码以获得预期的输出? PHP 的 hash 默认输出十六进制编码的字符串,但 Python 的 .digest() 返回 bytes。您可能想使用 .hexdigest(): def __init__(self, key, iv): self.key = hashlib.sha256(key.encode('utf-8')).hexdigest()[:32].encode("utf-8") self.iv = hashlib.sha256(iv.encode('utf-8')).hexdigest()[:16].encode("utf-8") 初始化向量(IV)的思想是为使用相同密钥的加密提供随机化。如果您使用相同的 IV,攻击者可能能够推断出您发送了相同的消息两次。这可以被认为是一个损坏的协议。 IV 不应该是秘密的,因此您只需将其与密文一起发送即可。通常在加密期间将其添加到密文中并在解密之前将其切掉。 加密.php function encrypt($data, $passphrase) { if(is_array($data)) $data = json_encode($data); $secret_key = hash('sha256', $passphrase, true); $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); $encrypted_64 = openssl_encrypt($data, 'aes-256-cbc', $secret_key, 0, $iv); $iv_64 = base64_encode($iv); $json = new stdClass(); $json->iv = $iv_64; $json->data = $encrypted_64; return base64_encode(json_encode($json)); } function decrypt($data, $passphrase) { $secret_key = hash('sha256', $passphrase, true); $json = json_decode(base64_decode($data)); $iv = base64_decode($json->{'iv'}); $encrypted_64 = $json->{'data'}; $data_encrypted = base64_decode($encrypted_64); $decrypted = openssl_decrypt($data_encrypted, 'aes-256-cbc', $secret_key, OPENSSL_RAW_DATA, $iv); $decoded = json_decode($decrypted,true) ; return is_array($decoded) ? $decoded : $decrypted; } python 加密.py import base64 import hashlib from Crypto.Cipher import AES import json def pad(data): block_size = AES.block_size padding = block_size - len(data) % block_size return data + bytes([padding] * padding) def encrypt(data, passphrase): if isinstance(data, dict): data = json.dumps(data) secret_key = hashlib.sha256(passphrase.encode()).digest() iv = AES.new(secret_key, AES.MODE_CBC).iv cipher = AES.new(secret_key, AES.MODE_CBC, iv) data = data.encode('utf-8') padded_data = pad(data) encrypted_data = cipher.encrypt(padded_data) iv_64 = base64.b64encode(iv).decode() encrypted_64 = base64.b64encode(encrypted_data).decode() son_data = {"iv": iv_64, "data": encrypted_64} return base64.b64encode(json.dumps(json_data).encode()).decode() def decrypt(encrypted_data, passphrase): secret_key = hashlib.sha256(passphrase.encode()).digest() json_data = json.loads(base64.b64decode(encrypted_data)) iv = base64.b64decode(json_data['iv']) encrypted_data = base64.b64decode(json_data['data']) cipher = AES.new(secret_key, AES.MODE_CBC, iv) decrypted_data = cipher.decrypt(encrypted_data) decrypted_data = decrypted_data[:-decrypted_data[-1]] decrypted_data = decrypted_data.decode('utf-8') loaded_data = json.loads(decrypted_data) if isinstance(loaded_data, dict): return loaded_data return decrypted_data

回答 2 投票 0

我是否以正确的方式进行加密?(pycrypto,RSA)

从 Crypto.PublicKey 导入 RSA 从 base64 导入 b64encode,b64decode 导入日期时间 导入pytz 导入 json 导入请求 从 Crypto.Signature 导入 pkcs1_15 从 Crypto.Hash 导入 SHA25...

回答 0 投票 0

如何解决 Python 中的 there is no Crypto package 错误?

我的 Python 代码有错误,基本上我需要导入包 Crypto 并且我尝试下载它,它说包 crypto 已经安装然后一直显示相同......

回答 1 投票 0

我有这个应该生成密钥的 Python 代码,但我无法在 Linux 上执行该程序

我尝试在我的机器上同时使用 Python 和 Python 3 运行这段代码,但它有很多错误,例如: python3 生成.py 输出: 追溯(最近一次通话): 文件“/home/kali/Downloads/g...

回答 1 投票 0

AEAD 身份验证,具有不适合 RAM 的大量输入

假设我在磁盘上有一个文件不适合计算机的主内存。该文件由两部分组成,一小部分在文件开头不到 100 字节,大部分...

回答 0 投票 0

Python 中的两个字符串有什么区别?

我在一个 Python 函数中对几个字符串执行操作,并返回带有结果名称的最终值 我使用另一个文件中的结果值来加密或使用 RSA 算法签名...

回答 1 投票 0

使用 RSA SHA1 OAEP MGF1 加密消息后出现错误填充异常

我需要先加密一些消息,然后再将其作为 API 中的请求正文发送。我必须在 Python 中执行此操作,我使用的库是 Pycryptodome。从这里开始,当我使用术语 API 时,我指的是 ...

回答 0 投票 0

pycrypto用公钥加密私钥,然后解密会产生垃圾。

我试图建立安全的套接字连接,但当我创建私钥和创建私钥的pubkey,并创建另一个私钥,然后用pubkey加密另一个私钥并解密......

回答 1 投票 1

从Crypto.Cipher导入AES ModuleNotFoundError:没有名为'Crypto'的模块。如何运行我的Checksum.py文件?

[我首先尝试通过pip安装pycryptodome,它说从Crypto.Cipher导入AES ModuleNotFoundError出现以下错误:No module named'Crypto'

回答 1 投票 0

不支持使用python中的pem文件加密json,并给出RSA密钥格式

我正在使用一个加密模块,其中请求采用加密的JSON形式的参数。此加密由服务器提供的公用密钥完成,如下所示:def crypto_bank_request(...

回答 1 投票 2

ModuleNotFoundError:没有名为“加密”的模块。我已经安装了加密货币,但仍然是相同的错误

我遇到以下错误:从Crypto.Random导入随机ModuleNotFoundError:没有名为'Crypto'的模块,我已经安装了Crypto和pycryptodome,但仍然收到相同的错误。我是什么...

回答 1 投票 0

使用pip安装pycrypto失败

我在尝试下载某个包时遇到了问题: C:\Python27\Scripts>pip 安装 pycrypto 收集pycrypto 使用缓存的 https://files.pythonhosted.org/packages/60/db/

回答 9 投票 0

无法在python 3.6上安装mist或pycrypto

[每当我尝试运行pip install mist时,都会显示此错误。错误:pycrypto的构建轮失败运行pycrypto的setup.py clean未能构建pycrypto安装收集的...

回答 1 投票 0

为什么加密中的AES加密会产生汉字

我已经使用Crypto在Python中使用AES加密对文本文件进行了加密。当我在记事本中打开加密文件时,我看到一堆汉字和一些奇怪的符号。为什么...

回答 1 投票 -1

需要用Java加密并用Python解密的公共/专用RSA密钥

我们有一个用Java编写的系统,该系统将编写需要由Python系统解密的加密文件。我试图弄清楚Java和...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.