我花了半天的时间来弄清楚我遇到的问题,而且看来我已经走到了尽头。
我有一个ASP应用程序(无法访问实际代码,仅能访问数据库),其中用户密码存储在aspnet_membership>“密码”列中,它也有一个标志。
我还获得了机器密钥文件的副本,据我了解,该副本包含需要解密密码的密钥?
<machineKey validationKey="**validation key**" decryptionKey="**decryption key**" validation="SHA1" decryption="AES"/>
我已经尝试了很多不同的方法,例如使用开放的ssl,使用不同的库等。但是,我似乎对此缺乏知识。我目前正在尝试使用https://github.com/phpseclib/phpseclib库来解密密码:
$cipher = new AES(); // could use AES::MODE_CBC
// keys are null-padded to the closest valid size
// longer than the longest key and it's truncated
//$cipher->setKeyLength(128);
$cipher->setKey(**decrypt key**);
// the IV defaults to all-NULLs if not explicitly defined
$cipher->setIV($salt);
echo $cipher->decrypt($password);
无论我以何种方式尝试执行此操作,都会得到随机返回或错误。我在ASP应用程序上运行的AES版本或其他任何加密信息的信息非常有限。任何帮助将不胜感激!
答案 0 :(得分:-1)
您好,此MachineKey与Salt无关,salt是在运行时使用提供的密码由代码生成的。
.NET框架使用Rfc2898DeriveBytes进行加密 像这样
using (Rfc2898DeriveBytes rfc2898DeriveByte = new Rfc2898DeriveBytes(password, 16, 1000))
{
salt = rfc2898DeriveByte.Salt;
bytes = rfc2898DeriveByte.GetBytes(32);
}