Назад | Перейти на главную страницу

Можно ли получить пароль в открытом виде?

У меня есть хостинг, размещенный на более чем 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;
}