【问题标题】:HexDec to Char to Password Unencrypt in PHPHexDec 到 Char 到 PHP 中的密码解密
【发布时间】:2011-04-12 18:13:16
【问题描述】:

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

这是一个测试随机密码的链接。我已将 '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 站点定义文件,这是他们用来半隐藏密码的“加密” .我已经可以通过复制文件并插入不同的用户名来做到这一点,但我也想每次都发出新密码。仅供参考

【问题讨论】:

  • 这不是加密。这只是一个代码转换(base 256 → base 16 和相反)。
  • 如果你真的想加密一些东西(比如密码),看看MCrypt
  • 你是对的...我实际上并没有尝试加密本身的安全性...我实际上是在尝试自动创建 Dreamweaver 站点定义文件,这就是“加密" 他们用来半隐藏密码。

标签: php encoding hex


【解决方案1】:

仔细观察这一行:

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

您将值减少$i。所以每次递增,值都会是$literals[$i] - $i

这与上面的相反:

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

【讨论】:

  • 好吧,那部分确实有效。该行解码十六进制密码并打印它(参见演示)。一旦我有了字符串,问题就会回到十六进制。
  • 完美!是否进行了编辑以添加最后一行?我一定错过了!谢谢莱克
【解决方案2】:

感谢 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/ 也探讨了这个话题...

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

【讨论】:

    【解决方案3】:

    十六进制不是加密,充其量只是编码(实际上它主要是一个数字基数)。看起来您正在混淆基本转换和字符编码本身的十六进制编码。

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

    总体而言,尚不清楚您要在此处实现哪种密码保护,因为它只是编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 2021-07-23
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多