HexDec to Char to Password Unencrypt in PHP

时间:2010-09-15 15:23:03

标签: php encoding hex

好的,所以我试图弄清楚如何从十六进制加密到字符串和返回,但由于某种原因,当我加密时,我没有得到传入的相同密码,但它的关闭。 ..怪不对?我确定我的语法在某处错了。帮助

这是测试一个随机密码的链接。我将'pw'设置为十六进制版本并将其传递给:view demo

$encoded  = (string)$_GET['pw'];  
$literals = explode(' ', wordwrap($encoded, 2, ' ', 2));  
$password = '';  

for ($i = 0; $i < count($literals); $i++) {  
    $password .= chr(hexdec($literals[$i]) - $i);  
}

echo $password . '<br />';
print_r($literals) . '<br />';
$passarray = str_split($password);

echo '<pre>';
print_r($passarray);
echo '</pre>';

for($i = 0; $i < count($passarray); $i++) {
    $newpassword .= bin2hex($passarray[$i]);
}
echo $newpassword;

更新:

。我实际上并没有尝试“加密”安全性本身...我实际上是在尝试自动创建Dreamweaver站点定义文件,这是他们用来半隐藏密码的“加密” 。我可以通过复制文件和插入不同的用户名来实现这一点,但我也想每次都发出新密码。仅供参考

3 个答案:

答案 0 :(得分:3)

仔细观察这一行:

$password .= chr(hexdec($literals[$i]) - $i);

您将值减少$i。因此,每增加一个值,该值将为$literals[$i] - $i

这与上述相反:

$newpassword .= dechex(ord($passarray[$i]) + $i);

答案 1 :(得分:1)

感谢Lekensteyn的上述反转代码。在我的测试中,似乎Dreamweaver也期待大写字母,所以我添加了一个strtoupper,如下所示。我使用此代码从域列表和ftp凭据动态生成Dreamweaver站点定义文件(.ste)。

function dw_encode_pw($pw='') {
    $password = '';
    $passarray = str_split($pw);

    for($i = 0; $i < count($passarray); $i++) {
        $password .= strtoupper(dechex(ord($passarray[$i]) + $i));
    }
    return $password;
}

function dw_decode_pw($pw='') {
    if (empty($pw)) {
        return false;
    }

    $encoded  = (string) $pw;
    $literals = explode(' ', wordwrap($encoded, 2, ' ', 2));
    $password = '';
    for ($i = 0; $i < count($literals); $i++) {
        $password .= chr(hexdec($literals[$i]) - $i);
    }

    return $password;
}

还要感谢http://blog.affirmix.com/2008/08/28/encoded-passwords-in-ste-site-definition-files/http://www.matthewratzloff.com/blog/2007/04/18/decrypting-a-dreamweaver-site-definition-password/,它们也会探讨这个话题......

希望这可以帮助其他人寻找这个解决方案!

答案 2 :(得分:0)

十六进制不是加密,而是编码(实际上它主要是一个数字基础)。看起来你正在混合基本转换和字符编码本身的十六进制编码。

  • hexdec将分别将0,1,9,A,F,10分别变为0,1,9,10,15,16。
  • chr会将十进制数转换为字符(使用ASCII字符编码)
  • 不确定为什么要在您获得的值中减去$i
  • 另一方面,bin2hex有效地为您提供二进制数据序列的十六进制表示(至少可以打印出来)。它不一定与chr(hexdec(...))相反。

总的来说,目前还不清楚你在这里想要实现什么样的密码保护,因为它只是编码。

相关问题