可能获得明文密码?

我有超过20个Plesk服务器托pipe服务,版本11.在以前的版本中,密码没有encryption,那么如果我必须devise一些工具来pipe理主机帐户,我只是拿起明文密码数据库。 但现在的密码是encryption的,有什么办法可以解密密码? 通过API或任何其他方式,以便我可以将我的基于PHP的托pipepipe理与Plesk 11?

由Giulio提供的代码是没有用的,下面是一个实际工作的Python脚本。 需要PyCrypto(python-crypto)。 假定Plesk密钥存储在/etc/psa/private/secret_key 。 只要运行它并以encryption密码作为parameter passing:

 ./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')) 

为什么不直接找出Plesk使用的哈希algorithm,并在PHP应用程序中复制该function? 您不需要使用不隐私的密码来对其进行身份validation,而且您也不希望以明文forms存储密码,或者使用可逆encryption。

理论上,如果程序能得到encryption密码,是的,你可以用纯文本的方式取回密码。
编辑 :添加解密代码。

 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; }