AES-256-CCM我正在尝试解密使用Python加密的 PHP 密文,cryptography.hazmat我在 Python 代码中所做的是:
from cryptography.hazmat.primitives.ciphers.aead import AESCCM
from os import urandom
import base64
#Text To Encrypt
plaintext = bytes("message from python", encoding='utf-8')
#AES 256 Key Genrator
key = AESCCM.generate_key(256)
#Genrate Nonce
nonce= urandom(12)
#chipher
cipher = AESCCM(key, tag_length=8)
#Encryption
ciphertext = cipher.encrypt(nonce, plaintext, None)
key然后我将,nonce和转换ciphertext为 base64
key_b64 = base64.standard_b64encode(key)
ciphertext_b64 = base64.standard_b64encode(ciphertext)
nonce_b64 = base64.standard_b64encode(nonce)
在我的例子中我得到了这个结果
key = b'\xcb\x14\x96{,0(\x15\x86 \xda\xf8\x1b"i|M\xbd\xc5d\xe7\xa6I\xdf\x7f\xe11\xae\xe8\x8a\xb3j'
key_b64 = b'yxSWeywwKBWGINr4GyJpfE29xWTnpknff+ExruiKs2o='
nonce = b'\xc7f\xdc\xe3\xe4\x03>M\x9by\x92\x9d
nonce_b64 = b'x2bc4+QDPk2beZKd'
ciphertext = b'R\x9f\xe6D\\_\xdexC\x82\xf8\x8e\x9b;\x91\xc7OLo\xc2\t/\x8fV>G='
ciphertext_b64 = b'Up/mRFxf3nhDgviOmzuRx09Mb8IJL49WPkc9'
我在我的 PHP 代码中使用 base64 结果
<?php
$key_from_python = base64_decode('yxSWeywwKBWGINr4GyJpfE29xWTnpknff+ExruiKs2o=');
$ciphertext_from_python = base64_decode('ooGUzo0YiwKPs9+2wXySYEpdBNfSpyLUHm1M');
$nonce_from_python = base64_decode('Up/x2bc4+QDPk2beZKd');
$cipher = "aes-256-ccm";
if (in_array($cipher, openssl_get_cipher_methods())){
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$decrypted_mesage_from_pythom =
openssl_decrypt($encrypted_from_python_,$cipher,$key_from_python,$options=0 , $iv, $tag);
echo $decrypted_mesage_from_pythom;
}
它基于我在这里找到的一个例子http://php.babo.ist/#/en/function.openssl-encrypt.html我找不到另一个例子,解密过程没有返回任何东西
,真正让我困惑的是:
我们没有使用 IV 在 python 代码中加密,但是 PHP 需要非 NULL IV,如何解决?
PHP 代码中的什么$tag
以及 PHP 和 python 中的 $tag_lenght(cipher = AESCCM(key, tag_length=8)) ?
如果解密需要nonce
如何在我的 PHP 代码中使用它?
如何获得这份工作?从 python 加密并在 PHP 中解密相同的密文
注意:我必须使用 python 进行加密,使用 php 进行解密,我必须使用 AES-CCM,python 代码是固定的,谢谢您的理解
PIPIONE