擅长:python、mysql、java
<p>你至少有三个问题:</p>
<ul>
<li><p>你可能是说<code>hashlib.sha256(encPW.encode('UTF-8')).digest()</code>而不是<code>hashlib.sha256(encPW.encode('UTF-8').digest())</code>(右大括号在错误的位置)</p></li>
<li><p>在将密文写入文件之前,先用Base64对密文进行编码。你忘记了在解密之前从文件中读回它后解码它。例如:</p>
<pre><code>getBytes = base64.b64decode(bytes(selFile.read()))
</code></pre></li>
<li><p>这是一个大问题:在解密过程中,你需要与加密时使用的完全相同的IV。IV不是秘密的,但是它必须是唯一的,你用同一个密钥进行的每一次加密。通常情况下,IV写在密文前面,然后读回解密。在</p>
<pre><code>#encryption
encFile = base64.b64encode(iv + aes.encrypt(getBytes))
#decryption
getBytes = base64.b64decode(bytes(selFile.read()))
iv = getBytes[:16]
aes = AES.new(hashdecpw, AES.Mode_CFB, iv)
decFile = aes.decrypt(getBytes[16:])
</code></pre></li>
</ul>