简体   繁体   English

用python加密数据,在php解密失败

[英]Encrypt data with python, decrypt in php faild

I try to encrypt my data in Python and decrypt it in PHP, but when I use some data, I can decrypt it, but when I switch to some longer data, PHP fails to decrypt it.我尝试在Python中加密我的数据,在PHP中解密,但是当我使用一些数据时,我可以解密,但是当我切换到一些更长的数据时,PHP无法解密。 What should I do?我应该怎么办?

import hashlib
from base64 import b64encode, b64decode, urlsafe_b64encode, urlsafe_b64decode
from Crypto.Cipher import AES

text = 'randdata-sadkvp121kasap2l3'
secret_key = 'This is my secret lll'
secret_iv = 'This is my secret ada'

key = hashlib.sha256(secret_key.encode('utf-8')).hexdigest()[:32].encode("utf-8")
iv = hashlib.sha256(secret_iv.encode('utf-8')).hexdigest()[:16].encode("utf-8")

_pad = lambda s: s + (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size)

txt = _pad(text)
cipher = AES.new(key, AES.MODE_CBC, iv)
output = urlsafe_b64encode(cipher.encrypt(str.encode(txt))).rstrip(b'=')
print(output) #3H-137tsFowOfREf2zekkDuL1G7gdqvRzj9BHHUCRoU
<?php

$string = '3H-137tsFowOfREf2zekkDuL1G7gdqvRzj9BHHUCRoU';
$string = base64_decode($string);
$key = substr(hash('sha256', 'This is my secret lll'), 0, 32);
$iv = substr(hash('sha256', 'This is my secret ada'), 0, 16);
var_dump(openssl_decrypt($string, 'AES-256-CBC', $key, 0, $iv));//false
<?php
$padWith = '~';
$secret = '3H-137tsFowOfREf2zekkDuL1G7gdqvRzj9BHHUCRoU';
$fixedSecret = str_replace(array('-', '_'), array('+', '/'), $secret);

$key = substr(hash('sha256', 'This is my secret lll'), 0, 32);
$iv = substr(hash('sha256', 'This is my secret ada'), 0, 16);

$decryptedSecret = openssl_decrypt($fixedSecret, 'AES-256-CBC', $key, OPENSSL_ZERO_PADDING, $iv);
//$decrypted_secret = openssl_decrypt($decoded_secret, $method, $hashKey, OPENSSL_RAW_DATA+OPENSSL_ZERO_PADDING, $iv_hash);

var_dump(rtrim($decryptedSecret, $padWith));//randdata-sadkvp121kasap2l3

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM