python Crypto包中的RSA加密/解密似乎有问题:
from Crypto.PublicKey import RSA
from os import urandom
def test(keylen, datalen, rand_len):
k = RSA.generate(keylen)
ok, fail = (0,0)
for i in range(1000):
a = urandom(datalen)
if a == k.decrypt(k.encrypt(a, urandom(rand_len))):
ok += 1
else:
fail += 1
return ok, fail
Run Code Online (Sandbox Code Playgroud)
无论我做什么 keylen/datalen/rand_len 的组合,我都无法 100% 地解密。它只是我安装的加密吗?
>>> test(1024,128,0)
(853, 147)
>>> test(1024,127,0)
(996, 4)
>>> test(2048,127,0)
(994, 6)
Run Code Online (Sandbox Code Playgroud) 我想用RSA公钥解密一条消息,PyCrypto我正在使用下面的代码,但是no private key在下面的代码中应该改变错误?
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64
licence_key="bla bla"
licence_key_in_bytes=licence_key.encode("utf-8")
encrypted=base64.b16decode(licence_key_in_bytes)
key = open("public_key", "r").read()
rsakey = RSA.importKey(key)
rsakey = PKCS1_OAEP.new(rsakey)
decrypted_message= rsakey.decrypt(encrypted)
Run Code Online (Sandbox Code Playgroud) 请对我温柔点。我已经搜索过该网站,我知道这个确切问题还有另一个答案,但是发布在那里的答案对我不起作用。
我正在尝试安装pycrypto,以便我可以开始paramiko工作。 Paramiko由于缺少pycrypto模块而失败。我试过使用pip install pycryptowhich 成功,但没有解决问题。
我试过安装二进制版本pycrypto,但没有解决问题。
现在我正在尝试构建pycrypto. 我有cygwin64并mingw安装在我的机器上。最远的方法是
python setup.py build --compiler=mingw32
Run Code Online (Sandbox Code Playgroud)
这会出错,
checking whether we are cross compiling... configure: error: in `/cygdrive/c/Python27/pycrypto-2.6.1':
configure: error: cannot run C compiled programs.
Run Code Online (Sandbox Code Playgroud)
另一个答案建议删除路径中的空格。我曾尝试将路径简化为简单
c:\mingw;c:\python2.7;c:\cygwin64\bin
Run Code Online (Sandbox Code Playgroud)
结果没有改变?
有没有人可以指点我的解决方法?谢谢你。总体目标是开始paramiko工作。该paramiko错误是
ImportError: No module named Crypto.PublicKey
Run Code Online (Sandbox Code Playgroud) 我试图使用pip在python 3.6.0上安装pysnmp(使用pycrypto),但是我遇到了一个错误:
命令""c:\ program files(x86)\ python36-32\python.exe"-u -c"import setuptools,tokenize; file ='C:\ Users\HOME-M~1\AppData\Local\Temp\pip-build-6l69kxa5\pycrypto\setup.py'; f = getattr(tokenize,'op en',open)(file); code = f.read().replace('\ r \n','\n'); f.close(); exec(compile(code,file,'exec'))"install --record C:\用户\ HOME-M~1\AppData\Local\Temp\pip-qq93gmf_-record\install-record.txt --single- version-external-managed --compile"在C:\ Users\HOME中失败并显示错误代码1 -M~1\AppData\Local\Temp\p ip-build-6l69kxa5\pycrypto \
我不是高级用户,我无法为这个问题找到解决方案.如果您知道如何解决它,请告诉我.Python 3.5.2很容易安装.
我需要加密一些由 C++ 编写的 android 本机服务创建的文件。我必须使用密钥库,但我不知道如何使用。有任何图书馆或文件吗?
我正在尝试安装 pyCrypto(通过 pip3 install pycrypto),但我不断收到此错误:
Failed building wheel for pycrypto
Running setup.py clean for pycrypto
Failed to build pycrypto
Installing collected packages: pycrypto
Running setup.py install for pycrypto ... error
Complete output from command c:\users\1007238\appdata\local\programs\python\python36-32\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\1007238\\AppData\\Local\\Temp\\pip-build-pm8w3iz2\\pycrypto\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\1007238\AppData\Local\Temp\pip-rd551f7l-record\install-record.txt --single-version-externally-managed --compile:
running install
running build
running build_py
creating build
creating build\lib.win32-3.6
creating build\lib.win32-3.6\Crypto
copying lib\Crypto\pct_warnings.py -> build\lib.win32-3.6\Crypto
Run Code Online (Sandbox Code Playgroud)
安装顺利,直到:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD …Run Code Online (Sandbox Code Playgroud) 我正在尝试为有效负载生成签名。我的技术栈是 Python3.6,它提供了密码学或 pycrypto 之类的库。问题是,我无法private_encrypt在密码学等库中重新创建M2Crypto的功能。M2Crypto生成的签名被我的对端接受为有效签名,而两个库生成的签名被丢弃,表示签名无效。
我使用 python2.7 创建了一个最小的 POC 来说明我的情况。
import base64
payload = b'This is the payload for which I wish to generate signature'
### Using library cryptography ###
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
with open("private_key", "rb") as key_file:
private_key = serialization.load_pem_private_key(
key_file.read(),
password=None,
backend=default_backend()
)
signature = private_key.sign(
payload,
padding=padding.PKCS1v15(),
algorithm=hashes.SHA1()
)
encoded_signature = base64.b16encode(signature)
print("Signature using cryptography - ", encoded_signature)
### Using library pycrypto ###
from Crypto.Signature import …Run Code Online (Sandbox Code Playgroud) 过去使用 PyCrypto 时,我能够执行以下操作来生成 RSA 公钥的指纹:
rsa_cipher = PKCS1_v1_5.new(RSA.importKey(pub_rsa_key))
hashlib.sha1(rsa_cipher._key.exportKey("DER")).hexdigest()
Run Code Online (Sandbox Code Playgroud)
如果没有 PyCrypto,我怎样才能达到同样的目的?
编辑
我提供的pub_rsa_key是一个.perm文件的内容,即:
-----BEGIN PUBLIC KEY-----
MII...AB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
PyCrypto 被认为是不安全的,不再维护,所以我切换到 Python 的密码学,但它似乎没有足够的功能。
执行导出的任何文档或搜索词都会有所帮助。
编辑 2
Maarten Bodewes 的评论(谢谢)把我带到了一个似乎是我正在寻找的地方。但是DER导出的结果不同:
# Python 3.7 using Cryptography
from cryptography.hazmat.primitives import serialization
with open('pub_key.perm', 'rb') as key_file:
public_key = serialization.load_pem_public_key(key_file.read(), backend=default_backend())
pub_der = public_key.public_bytes(encoding=serialization.Encoding.DER, format=serialization.PublicFormat.PKCS1)
print(sha1(pub_der).hexdigest())
# gives "d291c142648b7........c2f4676f4213203c4bd"
Run Code Online (Sandbox Code Playgroud)
在哪里
# Python 2.7 using PyCrypto
from Crypto.Cipher …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用OpenSSLPython 中的模块进行证书验证。
我有窗口的openssl命令为:
openssl verify -partial_chain -CAfile Intermediate.pem UserCert.pem
你能建议我在 Python 中等效吗?
要求:这需要由OpenSSL或任何 Python3 模块完成。使用os.system将解决问题,但这不会满足要求。
pycrypto ×10
python ×8
rsa ×4
cryptography ×2
android ×1
encryption ×1
keystore ×1
m2crypto ×1
mingw32 ×1
openssl ×1
paramiko ×1
pyopenssl ×1
pysnmp ×1
python-3.6 ×1