gpt4 book ai didi

Python Cryptography Multi Backend无法初始化

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:37 26 4
gpt4 key购买 nike

Traceback (most recent call last):
File "ENCDEC.py", line 96, in decrypt
File "site-packages\cryptography\fernet.py", line 32, in __init__
File "site-packages\cryptography\hazmat\backends\__init__.py", line 35, in def
ault_backend
File "site-packages\cryptography\hazmat\backends\multibackend.py", line 33, in
__init__
ValueError: Multibackend cannot be initialized with no backends. If you are seeing this error when trying to use default_backend() please try uninstalling and reinstalling cryptography.

于是我就做了这个加解密程序,没问题。唯一的问题是它不会构建 .exe。我重新安装,并尝试使用 --onefile。

from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
import os, sys, getpass, time
from cryptography.fernet import Fernet
from PyQt4 import QtCore, QtGui, uic
import subprocess
from cryptography.hazmat.backends import default_backend
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(795, 603)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.tabWidget = QtGui.QTabWidget(self.centralwidget)
self.tabWidget.setGeometry(QtCore.QRect(0, 0, 801, 601))
self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
self.encrypt = QtGui.QWidget()
self.encrypt.setObjectName(_fromUtf8("encrypt"))
self.data = QtGui.QLineEdit(self.encrypt)
self.data.setGeometry(QtCore.QRect(0, 450, 791, 31))
self.data.setAccessibleName(_fromUtf8(""))
self.data.setAutoFillBackground(True)
self.data.setObjectName(_fromUtf8("data"))
self.encryptButton = QtGui.QPushButton(self.encrypt)
self.encryptButton.setGeometry(QtCore.QRect(0, 492, 791, 61))
self.encryptButton.setObjectName(_fromUtf8("encryptButton"))
self.cryptDisplay = QtGui.QLineEdit(self.encrypt)
self.cryptDisplay.setGeometry(QtCore.QRect(12, 420, 371, 20))
self.cryptDisplay.setReadOnly(True)
self.cryptDisplay.setObjectName(_fromUtf8("cryptDisplay"))
self.keyDisplay = QtGui.QLineEdit(self.encrypt)
self.keyDisplay.setGeometry(QtCore.QRect(422, 420, 361, 20))
self.keyDisplay.setReadOnly(True)
self.keyDisplay.setObjectName(_fromUtf8("keyDisplay"))
self.tabWidget.addTab(self.encrypt, _fromUtf8(""))
self.Decrypt = QtGui.QWidget()
self.Decrypt.setObjectName(_fromUtf8("Decrypt"))
self.decryptButton = QtGui.QPushButton(self.Decrypt)
self.decryptButton.setGeometry(QtCore.QRect(8, 492, 781, 61))
self.decryptButton.setObjectName(_fromUtf8("decryptButton"))
self.input1 = QtGui.QLineEdit(self.Decrypt)
self.input1.setGeometry(QtCore.QRect(10, 460, 371, 20))
self.input1.setObjectName(_fromUtf8("input1"))
self.input2 = QtGui.QLineEdit(self.Decrypt)
self.input2.setGeometry(QtCore.QRect(420, 460, 361, 20))
self.input2.setObjectName(_fromUtf8("input2"))
self.data_2 = QtGui.QLineEdit(self.Decrypt)
self.data_2.setGeometry(QtCore.QRect(10, 420, 781, 31))
self.data_2.setAccessibleName(_fromUtf8(""))
self.data_2.setAutoFillBackground(True)
self.data_2.setReadOnly(True)
self.data_2.setObjectName(_fromUtf8("data_2"))
self.tabWidget.addTab(self.Decrypt, _fromUtf8(""))
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(1)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.data.setText("MESSAGE")
self.cryptDisplay.setText("ENCRYPTED MESSAGE")
self.keyDisplay.setText("DECRYPTION KEY")
self.input2.setText("DECRYPTION KEY")
self.input1.setText("ENCRYPTED MESSAGE")
self.data_2.setText("DECRYPTED MESSAGE")
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.encryptButton.setText(_translate("MainWindow", "Encrypt", None))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.encrypt), _translate("MainWindow", "Encrypt", None))
self.decryptButton.setText(_translate("MainWindow", "Decrypt", None))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.Decrypt), _translate("MainWindow", "Decrypt", None))
self.encryptButton.clicked.connect(self.process_input)
self.decryptButton.clicked.connect(self.decrypt)
def process_input(self):
key = Fernet.generate_key()
cipher_suite = Fernet(key)
cipher_text = cipher_suite.encrypt(str(self.data.text()))
print self.data.text()
print cipher_text
plain_text = cipher_suite.decrypt(cipher_text)
self.cryptDisplay.setText(cipher_text)
self.keyDisplay.setText(str(key))
def decrypt(self):
cipher_suite = Fernet(str(self.input2.text()))
plain_text = cipher_suite.decrypt(str(self.input1.text()))
self.data_2.setText(str(plain_text))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

我尝试导入默认后端,但不知道我是否正确地做到了这一点。花了几天时间制作,我希望能够与人们分享。不知道现在该做什么,欢迎想法。

最佳答案

我在卡住 Python 脚本时也遇到了同样的问题。我按照此处的建议使用 cryptography.hazmat.backends 的补丁解决了问题 github#issues

    # file: pyenv\lib\site-packages\cryptography\hazmat\backends\__init__.py
def _available_backends():
global _available_backends_list

if _available_backends_list is None:
_available_backends_list = [
ep.resolve()
for ep in pkg_resources.iter_entry_points(
"cryptography.backends"
)
]

# patch starts here
if _available_backends_list is None or len(_available_backends_list) == 0:
# backend 1
try:
from cryptography.hazmat.backends.commoncrypto.backend import backend as be_cc
except ImportError:
be_cc = None
# backend 2
try:
from cryptography.hazmat.backends.openssl.backend import backend as be_ossl
except ImportError:
be_ossl = None
# add any backends of your own

_available_backends_list = [
be for be in (be_cc, be_ossl) if be is not None
]
# patch ends here

return _available_backends_list

此方法本质上是将后端模块路径硬编码到_available_backends_list。如果您使用的不是上述模块,那么您可以将自己的导入添加到该方法中。如果这不能解决您的问题,请尝试将整个加密包复制到构建目录。就我而言,我必须将 distutils 包复制到构建目录中,以使其在第一次尝试中工作。

如果成功,您可以尝试将缺少的模块导入包含到 setup.py

关于Python Cryptography Multi Backend无法初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38277915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com