<p>加密技术将“后端”从3.1版的强制参数更改为可选参数。当然,最好使用最新版本,尤其是对于加密库。如果由于某种原因,您无法升级到最新版本,那么您可以进行一些小的更改来修复它</p>
<p>您可以通过调用帮助来检查哪些参数是必需的:</p>
<pre><code>>>> from cryptography.hazmat.primitives.ciphers import Cipher
>>> help(Cipher.__init__)
Help on function __init__ in module cryptography.hazmat.primitives.ciphers.base:
__init__(self, algorithm, mode, backend)
Initialize self. See help(type(self)) for accurate signature.
</code></pre>
<p>从加密文档:
<a href="https://cryptography.io/en/latest/hazmat/backends/index.html#getting-a-backend" rel="nofollow noreferrer">https://cryptography.io/en/latest/hazmat/backends/index.html#getting-a-backend</a></p>
<blockquote>
<p>Cryptography was designed to support multiple cryptographic backends, but consumers rarely need this flexibility. Starting with version 3.1 backend arguments are optional and the default backend will automatically be selected if none is specified.</p>
<p>On older versions you can get the default backend by calling default_backend().</p>
</blockquote>
<p>因此,您可以更改file2以包括默认后端:</p>
<pre><code># Python Module ciphersuite
import os
import random
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
# get the default backend
from cryptography.hazmat.backends import default_backend
# Security parameter (fixed)
KEYLEN = 16
# Use crypto random generation to get a key with up to 3 random bytes
def gen():
sysrand = random.SystemRandom()
offset = sysrand.randint(1,3)
key = bytearray(b'\x00'*(KEYLEN-offset))
key.extend(os.urandom(offset))
return bytes(key)
def enc(k, m):
cipher = Cipher(algorithms.AES(k), modes.ECB(), default_backend())
encryptor = cipher.encryptor()
cph = b""
cph += encryptor.update(m)
cph += encryptor.finalize()
return cph
def dec(k, c):
cipher = Cipher(algorithms.AES(k), modes.ECB(), default_backend())
decryptor = cipher.decryptor()
msg = b""
msg += decryptor.update(c)
msg += decryptor.finalize()
return msg
</code></pre>