_data; $pwd = str_pad($in_pwd, self::PASSWD_SIZE); $enc_pwd = array_fill(0, self::PASSWD_SIZE, 0); for ($bit = 0; $bit < self::PASSWD_SIZE * self::BIT_OF_BYTE; ++ $bit) { $offset = self::$shuffle_matrix[$bit]; $from_mask = 0x80 >> ($bit % self::BIT_OF_BYTE); $to_mask = 0x80 >> ($offset % self::BIT_OF_BYTE); if (ord($pwd{$bit / self::BIT_OF_BYTE}) & $from_mask) { $enc_pwd[$offset / self::BIT_OF_BYTE] |= $to_mask; } } for ($i = 0; $i < self::PASSWD_SIZE; ++ $i) { $enc_pwd[$i] ^= self::$mask[$i]; } $tmp = ''; foreach ($enc_pwd as $i) { $tmp .= sprintf("%02X", $i); } $out_pwd = ''; for ($i = 0; $i < strlen($tmp); ++ $i) { $out_pwd .= chr(ord($tmp{$i}) + 1); } return base64_encode($out_pwd); } /*}}}*/ public function decrypt() { /*{{{*/ $in_pwd = $this->_data; $tmp = base64_decode($in_pwd); $pwd = ''; for ($i = 0; $i < strlen($tmp); ++ $i) { $pwd .= chr(ord($tmp{$i}) - 1); } for ($i = 0; $i < self::PASSWD_SIZE; ++ $i) { $enc_pwd[$i] = hexdec(substr($pwd, $i * 2, 2)); $enc_pwd[$i] ^= self::$mask[$i]; } $pwd = array_fill(0, self::PASSWD_SIZE, 0); for ($bit = 0; $bit < self::PASSWD_SIZE * self::BIT_OF_BYTE; ++ $bit) { $offset = self::$shuffle_matrix[$bit]; $from_mask = 0x80 >> ($offset % self::BIT_OF_BYTE); $to_mask = 0x80 >> ($bit % self::BIT_OF_BYTE); if ($enc_pwd[$offset / self::BIT_OF_BYTE] & $from_mask) $pwd[$bit / self::BIT_OF_BYTE] |= $to_mask; } $out_pwd = ''; foreach ($pwd as $i) { $out_pwd .= chr($i); } return $out_pwd; } /*}}}*/ } // End ^ Native EOL ^ encoding