У меня есть хостинг, размещенный на более чем 20+ серверах Plesk, версия 11. Как и в предыдущих версиях, пароли не были зашифрованы, тогда, если бы мне пришлось разработать некоторые инструменты для управления учетными записями хостинга, я просто взял пароли в открытом виде из База данных. но поскольку теперь пароли зашифрованы, есть ли способ расшифровать пароли? через API или любым другим способом, чтобы я мог интегрировать управление хостингом на основе php с plesk 11?
Почему бы просто не выяснить, какой алгоритм хеширования использует Plesk, и воспроизвести эту функциональность в своем приложении PHP? Вам не нужна незашифрованная версия пароля для аутентификации по нему, и вы никогда не захотите хранить пароль в открытом виде или с обратимым шифрованием.
Код, предоставленный Джулио, бесполезен, вот скрипт Python, который действительно работает. Требуется PyCrypto (python-crypto). Предполагается, что секретный ключ Plesk хранится в /etc/psa/private/secret_key
. Просто запустите его и передайте зашифрованные пароли в качестве аргументов:
./deplesk.py '$AES-128-CBC$T82uDt6NSdytfhjQaOIKGg==$CMJ6FIdAD8zJ0PgwQ3DosA=='
Сценарий:
#!/usr/bin/env python
import sys
import base64
from Crypto.Cipher import AES
key = open('/etc/psa/private/secret_key', 'rb').read()
for pw in sys.argv[1:]:
lead, typ, iv, ct = pw.split('$')
iv = base64.b64decode(iv)
ct = base64.b64decode(ct)
assert typ == 'AES-128-CBC'
plain = AES.new(key, mode=AES.MODE_CBC, IV=iv).decrypt(ct).rstrip(b'\0')
print(plain.decode('utf8'))
Теоретически, если программа может получить пароль шифрования, да, вы можете получить обратно пароль в виде обычного текста.
РЕДАКТИРОВАТЬ: добавлен код расшифровки.
function decrypt_password($pass,$key)
{
$base64encoded_ciphertext = $pass;
$res_non = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($base64encoded_ciphertext), ‘ecb’);
$decrypted = $res_non;
$dec_s2 = strlen($decrypted);
$padding = ord($decrypted[$dec_s2-1]);
$decrypted = substr($decrypted, 0, -$padding);
return $decrypted;
}