【问题标题】:Python - Decrypt from php openssl_encryptPython - 从 php openssl_encrypt 解密
【发布时间】:2021-12-24 22:44:42
【问题描述】:

问题, 我想知道是否有人可以指出我正确的方向,因为我一直在挠头。 是否可以在python中构建一个解密函数来解密使用php加密的东西,方法是128-CTR?

php端使用以下编码

$enc_method = 'AES-128-CTR';
$enc_iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($enc_method));
$crypted_token = openssl_encrypt($token, $enc_method, $enc_key, 0, $enc_iv) . "::" . bin2hex($enc_iv);

令牌是被加密的数据。

我会发布一堆我的试用代码,但是太多了,而且我不是加密方面的超级专家(php 方面是不久前在旧版本上构建的)。我在想,如果我能让它以某种方式向后兼容,我可能最终会将它重建为 python 中的新标准。只是想知道是否有人与我可能忽略的 otpics 有任何链接,或者关于该主题的一些好书建议,我可以阅读更多内容以使其更好。 提前致谢。

【问题讨论】:

  • 代码用 3 个反引号 ```` 而不是 3 个单引号 :)
  • 对书籍等的推荐是题外话。您应该发布最有希望的 Python 代码并描述问题。
  • 是的,我有点想让人们远离那种恐惧,因为这真的不是我的强项。如果有人隐藏了我可能还没有找到的链接,我正在寻找更多的指针。这是我想要做得更好的东西,所以我认为如果我不能让它与向后兼容性一起工作,我将使用 python 完全用强加密重写它。刚接触python,所以我正在努力学习。这些书是一个附带问题,因为我认为在这个主题上有很多人比我更聪明。

标签: python php encryption


【解决方案1】:

这是一个使用 pyca/cryptography 的工作示例。

import os
import base64
import binascii
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend

crypted_token = "BuPVjqUgeGtXRT7OVsbjGZWRzZ3TEhZ3dSU4nyCtlA==::c6eda9c511d197d834cee4846fa726c3"
(ct, iv) = crypted_token.split("::", 1)
ct = base64.b64decode(ct)
iv = binascii.unhexlify(iv)

key = base64.b64decode("OqrcoKcA46oP6VpsMv14Kg==")

cipher = Cipher(algorithms.AES(key), modes.CTR(iv), backend=default_backend())

#encryptor = cipher.encryptor()
#ct = encryptor.update(message) + encryptor.finalize()

decryptor = cipher.decryptor()
plain = decryptor.update(ct) + decryptor.finalize()

print("Decrypted = {}", plain)

如果您开始使用其他库并想使用它,请随时发布示例代码,我们可以帮助使其正常运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2019-06-16
    • 2021-10-10
    • 2017-04-10
    相关资源
    最近更新 更多