我正在使用PyCrypto(在谷歌应用引擎上)进行AES加密.
PyCrypto给我一个AES的原始接口 - 我需要将我的键和输入填充到16字节倍数.
是否有更高级别的图书馆为我照顾这些东西?
该代码应该建立一个监听来自投票网站的连接的服务。它是一个监听来自外部(客户端)连接的服务器。当客户端连接时,客户端等待发送版本号。一旦我的服务器/侦听器发送版本号,客户端就会使用我提供的公钥进行 RSA 2048 位加密的 256 字节块进行响应。然后必须对该块进行解码,(稍后)我将读取内容。我陷入无法解密的困境:
我明白了:
开始连接...
来自 ('50.28.6.244', 35338) 的连接
正在发送版本号...
接收加密块
回溯(最近一次调用最后一次):
文件“voteListener.py”,第 97 行,位于
主要(私钥)
文件“voteListener.py”,第 49 行,在 Main 中
解码文件=decode_msg(数据,私钥)
文件“voteListener.py”,第 58 行,decode_msg
密文 = cipher.decrypt(msg)
文件“C:\Python27\lib\site-packages\Crypto\Cipher\PKCS1_OAEP.py”,第 227 行,解密
引发 ValueError("解密不正确。")
ValueError:解密不正确。
C:\Users\STEXAS\Desktop\vote>暂停
按任意键继续 。。。
我的代码:
import socket
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from os import path
def Main(privatekey):
host = "0.0.0.0"
port = 8192
version = "VOTIFIER 1.9"
print("starting connection...")
while True:
s = socket.socket()
s.bind((host, port))
s.listen(1)
c, addr = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 AES-256 和带有 base64 的 Python 加密时间戳。使用以下命令生成输出的 OpenSSL 等效项:
openssl enc -aes256 -pass pass:'1Lw2*kx18#AvNuij*iRL1nY1UA_#k8$+' -nosalt -base64 <<< "1489355323"
Run Code Online (Sandbox Code Playgroud)
我的python代码如下所示:
import time
from base64 import b64encode
from Crypto.Cipher import AES
key = '1Lw2*kx18#AvNuij*iRL1nY1UA_#k8$+'
timestamp = "1489355323"
BS = 16
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
iv = "\x00" * 16
aes = AES.new(key, AES.MODE_CBC, iv)
ciphertext = aes.encrypt( pad( timestamp ) )
print b64encode(ciphertext)
Run Code Online (Sandbox Code Playgroud)
目前输出不同,我需要获得与 OpenSSL 命令相同的输出。知道我做错了什么吗?
from Crypto.Cipher import AES
ModuleNotFoundError: No module named 'Crypto'
Run Code Online (Sandbox Code Playgroud)
我正在使用 PyCharm Community 2020.3 和 Python 3.9。
这个项目之前编译并运行过,但我不得不更换计算机并重新创建我的开发环境,此时,该项目失败了,如上所述。
我重新安装了 pycryptodome (见图),但仍然出现错误。
某些原因导致编译器没有注意到 pycryptodome 的存在。也许还有别的东西让它黯然失色?我需要卸载库“crypto”吗?
我正在使用CryptoJS(v 2.3)对Web应用程序中的字符串进行加密,并且需要在Python中的服务器上对其进行解密,因此我正在使用PyCrypto。我觉得我缺少了一些东西,因为我无法正常工作。
这是JS:
Crypto.AES.encrypt('1234567890123456', '1234567890123456',
{mode: new Crypto.mode.CBC(Crypto.pad.ZeroPadding)})
// output: "wRbCMWcWbDTmgXKCjQ3Pd//aRasZ4mQr57DgTfIvRYE="
Run Code Online (Sandbox Code Playgroud)
python:
from Crypto.Cipher import AES
import base64
decryptor = AES.new('1234567890123456', AES.MODE_CBC)
decryptor.decrypt(base64.b64decode("wRbCMWcWbDTmgXKCjQ3Pd//aRasZ4mQr57DgTfIvRYE="))
# output: '\xd0\xc2\x1ew\xbb\xf1\xf2\x9a\xb9\xb6\xdc\x15l\xe7\xf3\xfa\xed\xe4\xf5j\x826\xde(m\xdf\xdc_\x9e\xd3\xb1'
Run Code Online (Sandbox Code Playgroud) 嗨,我想从这里安装pycrypto-2.3
我下载并运行以下命令
cd pycrypto-2.3/
python setup.py install
Run Code Online (Sandbox Code Playgroud)
我收到以下错误,
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/Crypto
copying lib/Crypto/pct_warnings.py -> build/lib.linux-x86_64-2.7/Crypto
copying lib/Crypto/__init__.py -> build/lib.linux-x86_64-2.7/Crypto
creating build/lib.linux-x86_64-2.7/Crypto/Hash
copying lib/Crypto/Hash/SHA.py -> build/lib.linux-x86_64-2.7/Crypto/Hash
copying lib/Crypto/Hash/__init__.py -> build/lib.linux-x86_64-2.7/Crypto/Hash
copying lib/Crypto/Hash/MD5.py -> build/lib.linux-x86_64-2.7/Crypto/Hash
copying lib/Crypto/Hash/RIPEMD.py -> build/lib.linux-x86_64-2.7/Crypto/Hash
copying lib/Crypto/Hash/HMAC.py -> build/lib.linux-x86_64-2.7/Crypto/Hash
creating build/lib.linux-x86_64-2.7/Crypto/Cipher
copying lib/Crypto/Cipher/__init__.py -> build/lib.linux-x86_64-2.7/Crypto/Cipher
creating build/lib.linux-x86_64-2.7/Crypto/Util
copying lib/Crypto/Util/_number_new.py -> build/lib.linux-x86_64-2.7/Crypto/Util
copying lib/Crypto/Util/__init__.py -> build/lib.linux-x86_64-2.7/Crypto/Util
copying lib/Crypto/Util/winrandom.py -> build/lib.linux-x86_64-2.7/Crypto/Util
copying lib/Crypto/Util/python_compat.py -> build/lib.linux-x86_64-2.7/Crypto/Util
copying lib/Crypto/Util/RFC1751.py -> build/lib.linux-x86_64-2.7/Crypto/Util …Run Code Online (Sandbox Code Playgroud) 这简直让我发疯.
这就是发生的事情:
在python shell里面:
>>> from Crypto.Cipher import ARC4
>>> a = ARC4.new('0123456789123456')
>>> b = ARC4.new('0123456789123456')
>>> de = b.decrypt
>>> en = a.encrypt
>>> en('abcd')
'\x18\x07\x8a\xdc'
>>> en('abcd')
'\x89>\xa0T'
>>> en('abcd')
'y\xe1-\xfe'
>>> en('abcd')
'\xc7\xf6\x19\xfc'
>>>
Run Code Online (Sandbox Code Playgroud)
我abcd用相同的密钥加密了4次.四次我得到了不同的加密字符串.
当我做了以下事情时(也许我会在解密所有上述不同的加密消息时获得相同的解密消息).
>>> al = []
>>> for i in range(10):
al.append(en('abcd'))
>>> al
['\x81\x05h\x06', '\x11;\x88\xc7', '\xb6\xb9g\x10', '\x1e$\x8c\xca', '\xbdh\xc2\xf0', 'ruiO', '7\xec\x7f\xdf', '\x08\xf3\x90\x8a', '\x1c\x95\xf3(', '\xbd@-\x11']
>>> gl = []
>>> for i in range(10):
gl.append(de(al[i]))
>>> gl
['\xc8\x0f6\xb7', '\x18y`A', 'tm\x12\t', '\x9c\xf65M', …Run Code Online (Sandbox Code Playgroud) 我有一个 base64 密码消息和一个带有公钥信息的 pubkey.pem。因此,由于密钥很小(576),我已经恢复了重建私钥所需的所有信息:p、q 和 d。
现在我想破译该消息,但我不知道该怎么做。事实上,如果我想使用解密函数,我需要一个 priv_key 对象,但我不知道如何从 (n,e,d) 生成它
from Crypto.PublicKey import RSA
from base64 import b64decode
#message I want to decipher
msg="e8oQDihsmkvjT3sZe+EE8lwNvBEsFegYF6+OOFOiR6gMtMZxxba/bIgLUD8pV3yEf0gOOfHuB5bC3vQmo7bE4PcIKfpFGZBA"
pub_key64 = 'MGQwDQYJKoZIhvcNAQEBBQADUwAwUAJJAMLLsk/b+SO2Emjj8Ro4lt5FdLO6WHMMvWUpOIZOIiPu63BKF8/QjRa0aJGmFHR1mTnG5Jqv5/JZVUjHTB1/uNJM0VyyO0zQowIDAQAB'
pub_keyDER = b64decode(pub_key64)
pub_key_obj = RSA.importKey(pub_keyDER) #my weak public key
... # how to generate priv_key_obj ???
dsmg=priv_key_obj.decrypt(msg)
Run Code Online (Sandbox Code Playgroud) 我正在为我的学校项目编程,上面有一个问题。这是我的代码:
def aes():
#aes
os.system('cls')
print('1. Encrypt')
print('2. Decrypt')
c = input('Your choice:')
if int(c) == 1:
#cipher
os.system('cls')
print("Let's encrypt, alright")
print('Input a text to be encrypted')
text = input()
f = open('plaintext.txt', 'w')
f.write(text)
f.close()
BLOCK_SIZE = 32
PADDING = '{'
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
secret = os.urandom(BLOCK_SIZE)
f = open('aeskey.txt', 'w')
f.write(str(secret))
f.close()
f = open('plaintext.txt', 'r')
privateInfo = f.read()
f.close()
cipher …Run Code Online (Sandbox Code Playgroud) pycrypto ×9
python ×8
cryptography ×2
encryption ×2
python-2.7 ×2
rsa ×2
aes ×1
cryptojs ×1
javascript ×1
pycharm ×1
pycryptodome ×1
python-3.x ×1