Skip to content

Wo kann man crypto.dll unter 64-Bit-Windows erhalten und installieren?

Denken Sie daran, dass es beim Rechnen für ein Problem normalerweise mehrere Lösungen gibt, genauso wie wir die optimalste und effizienteste teilen.

Lösung:

Ich habe viel gesucht und konnte herausfinden, dass Ihnen die crypto.dll fehlt. crypto.dll Datei. Ihr Code sucht nach dieser dll-Datei und kann sie nicht finden.

Bitte beachten Sie, dass dies nicht installiert wird von pip install crypto da es sich um eine Python-Bibliothek handelt und der Code nach einer dll-Datei sucht.

ctypes.util.find_library sucht nach der dll-Datei in der Windows-Umgebungspfadvariable.

Referenz: find_library() in ctypes

Um das zu überprüfen, habe ich überprüft.

find_library('l2gpstore')
>>'C:\WINDOWS\system32\l2gpstore.dll'
find_library('java')
>>'C:\Program Files\Java\jdk-9.0.4\bin\java.dll'

Außerdem sollten Sie installieren OpenSSL mit . libcrypto Modul von hier aus

OpenSSL

OpenSSL-Installationsanweisungen

Die Hauptquellen werden in unserem Git-Repository verwaltet, das
über das Netzwerk zugänglich ist und auf GitHub geklont wird, unter
https://github.com/openssl/openssl. Bugs und Pull-Patches (Issues und
Pull Requests) sollten im GitHub-Repository abgelegt werden. Bitte machen Sie sich mit
Sie sich mit der Lizenz vertraut.

libcrypto in Bezug auf OpenSSL

Referenz : GitHub

libcrypto (mit plattformspezifischer Benennung):
Bietet allgemeine kryptographische und X.509-Unterstützung, die von SSL/TLS benötigt wird, aber
nicht logisch Teil davon.

Nach der Installation der Binärdateien und der Überprüfung der crypto.dll in einer der Pfadzeichenketten in Ihren Umgebungsvariablen verfügbar ist, sollte dieses Problem behoben sein.

Wenn nicht, fügen Sie es in die Pfadvariable ein und überprüfen Sie es.

Aktualisieren:

Aktualisieren, da die Frage aktualisiert wurde und das Problem erneut aufgetreten ist.

Es gibt architektonische Änderungen bei OpenSSL 1.1.0 im Vergleich zu 1.0.2

13. September 2018 - OpenSSL 1.1.0 und spätere Versionen unterscheiden sich deutlich von früheren Versionen. Benutzer sollten für maximale Anwendungskompatibilität BEIDE Versionen, die 1.0.2-Serie (LTS) und die 1.1.1-Serie (LTS), installieren. Entwickler müssen ihre Software neu kompilieren, um 1.1.1 zu unterstützen. Weitere Details finden Sie im offiziellen OpenSSL-Release-Strategie-Dokument. - Prateek gestern

Wenn du 1.0.2 von Github öffnest, kannst du sehen crypto.h Datei, die gleiche Datei fehlt in der neuesten Version. Auch . OpenSSL gibt es eine Änderung in DLL Namen, sie wurden umbenannt in libeay32 in libcrypto

Sie müssen einen Code veröffentlichen, der die asn1crypto Bibliothek in dem Beitrag verwendet. Es gibt keinen Code, der asn1crypto explizit in Ihrem Beitrag verwendet. Daher kann ich Ihr Problem nicht reproduzieren, wenn ich pipenv.

Stellen Sie sicher, dass Sie auch aktualisierte Bibliotheken verwenden.

I würde nicht empfehlen DLL-Quelle von einer unzuverlässigen Quelle wie DLLdownloader herunterzuladen.


Wenn Sie Probleme mit der neuesten Version von OpenSSL und asn1crypto ist es besser, ein Downgrade durchzuführen OpenSSL auf 1.0.2 Ich denke, das würde funktionieren, da es mit crypto.h Datei.

Viel Glück!

Ich habe versucht, den Fehler auf meinem Rechner zu reproduzieren und war erfolgreich, als ich die "fehlerverursachende" Datei ausgeführt habe _big_num_ctypes.py. Ich habe zwar kein Visual Studio, aber der Fehler rührt von der fehlenden crypto.dll Datei. Wir werden dies Schritt für Schritt herausfinden. Untersuchen wir zunächst den fehlerverursachenden Codeschnipsel in der Datei _big_num_ctypes.py:

#imports
from ctypes.util import find_library
.
.
from .._ffi import LibraryNotFoundError, FFIEngineError

try:
# On Python 2, the unicode string here may raise a UnicodeDecodeError as it
# tries to join a bytestring path to the unicode name "crypto"
    libcrypto_path = find_library(b'crypto' if sys.version_info < (3,) else 'crypto')
    if not libcrypto_path:
        raise LibraryNotFoundError('The library libcrypto could not be found')
.
.
except (AttributeError):
    raise FFIEngineError('Error initializing ctypes')

Ich habe die Datei ausgeführt:

C:>cd "C:ProgramDataAnaconda3Libsite-packagesasn1crypto_perf"
C:ProgramDataAnaconda3Libsite-packagesasn1crypto_perf>python _big_num_ctypes.py

und hatte einen Traceback für den Import der Bibliothek:

Traceback (most recent call last):
  File "_big_num_ctypes.py", line 27, in 
    from .._ffi import LibraryNotFoundError, FFIEngineError
ValueError: attempted relative import beyond top-level package

Ich änderte also den Importpfad für .ffizu:

from asn1crypto._ffi import LibraryNotFoundError, FFIEngineError

Beim zweiten Durchlauf erschien der Fehler mit der fehlenden libcrypto-Bibliothek:

asn1crypto._ffi.LibraryNotFoundError: The library libcrypto could not be found

Die Ausnahme wird ausgelöst, wenn die dll . Bibliothek namens Krypto konnte unter C:WindowsSystem32 und/oder SYSWOW64 (für 64-Bit) nicht gefunden werden

libcrypto_path = find_library(b'crypto' if sys.version_info < (3,) else 'crypto')

Der Zweck von find_library ist es, eine bestimmte Bibliothek zu finden und einen Pfadnamen zurückzugeben. Das Verhalten dieser Methode variiert je nach Betriebssystem, wie in den Dokumenten beschrieben. Wenn diese Methode keine Pakete finden kann, gibt sie None.

>>> from ctypes.util import find_library
>>> print(find_library("c"))
None

In unserem Fall ist die Suche nach crypto.dll und ich konnte diese Datei auf meinem Computer nicht finden. Also habe ich sie heruntergeladen und genau nach den Anweisungen hier installiert. Als ich erneut nachsah, fand ich die Datei

 >>> find_library('crypto')
'C:\windows\system32\crypto.dll'

Jetzt habe ich python _big_num_ctypes.py erneut aus und erhielt eine andere Traceback:

    Traceback (most recent call last):
  File "_big_num_ctypes.py", line 37, in 
    libcrypto = CDLL(libcrypto_path)
  File "C:ProgramDataAnaconda3libctypes__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application

Eine weitere Untersuchung des obigen Fehlers ergab, dass, wenn ich eine 32-Bit-DLL mit 64-Bit-Python verwende, oder umgekehrt, dann kann ich solche Fehler wie hier beschrieben bekommen. Ich installierte also Python 3.6 32-bit und versuchte es erneut mit py -3.6-32 _big_num_ctypes.py. Ich habe auch alle erforderlichen Pakete installiert, aber dieser Fehler blieb bestehen.

Könnte es sein, dass wir 32-Bit-Binärpakete für die Crypto Paket benötigen? Diese Antwort und diese geben mehr Informationen.

Ich habe festgestellt, dass Pycryptodome ein regelmäßig gewartetes Paket ist und dem alten vorgezogen wird Crypto Paket bevorzugt wird, aber immer noch installiert werden kann unter Crypto. Ein weiterer Punkt, der zu beachten ist, ist, dass eine der Anforderungen für dieses Paket MS Visual Studio 2015 (Community Edition) und die C/C++-Compiler und die verteilbaren nur ist. Es könnte sein, dass einige C++-Compilerdateien oder MS Visual Studio-Dateien derzeit fehlen und diese Probleme verursachen.

Wenn Sie alle oben genannten Voraussetzungen installieren, wird die crypto.dll Datei und die PycryptodomePaket installiert haben, wird dieser Fehler vermutlich behoben sein. Sie haben bereits andere erforderliche Pakete installiert OpenSSL & Twilio. Leider kann ich MS Visual Studio nicht auf meinem Computer installieren und konnte dies daher nicht weiter testen.

Ich habe auch die unittest Code und es lief erfolgreich für mich:

#Output

.
----------------------------------------------------------------------
Ran 1 test in 0.771s

OK

Wenn Sie diesen Artikel beenden, können Sie die Abmessungen anderer Entwickler finden, Sie haben auch die Freiheit, Ihre zu verlassen, wenn Sie möchten.



Nutzen Sie unsere Suchmaschine

Suche
Generic filters

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.