Что нового

PHP код в Autoit

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Версия AutoIt: 3.3.8.1

Описание: XOR шифрование

Помогите перевести php код на Autoit

PHP:
Код:
  function xorShipher($string,$password)
  {
    $str_len = strlen($string);
    $gamma = '';
    while (strlen($gamma)< $str_len)
    {
      $seq = pack("H*",sha1($gamma.$password));
      $gamma.=substr($seq,0,8);
    }
    return $string^$gamma;
  }
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Если верно понял алгоритм то как то так:

Код:
#include <Crypt.au3>

;Global $salt = "abcABC" ; В вашем примере salt указан, но не используется

MsgBox(64, 'test', xorShipher('my_string', 'password'))

Func xorShipher($string, $password)
   Local $gamma = ''
   $str_len = StringLen($string)
   ;$seq=$salt ; В вашем примере salt указан, но не используется
   _Crypt_Startup()
   While (StringLen($gamma)< $str_len)
      $seq = StringToBinary(_Crypt_HashData($gamma & $password,$CALG_SHA1))
      $gamma += StringMid($seq,1,8)
   WEnd
   _Crypt_Shutdown()
   return BitXOR($string, $gamma)
EndFunc
 
Автор
R

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Строку $seq=$salt; забыл удалить, она не нужна.
beliy результат отличается от того что php выдает (

http://phptester.net/ тут я тестировал php код
Код:
echo xorShipher("my_string","password");
  function xorShipher($string,$password)
  {
    $str_len = strlen($string);
    $gamma = '';
    while (strlen($gamma)< $str_len)
    {
      $seq = pack("H*",sha1($gamma.$password));
      $gamma.=substr($seq,0,8);
    }
    return $string^$gamma;
  }

//Result: 6г>—НЫVQ€
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
beliy
Код:
_Crypt_Startup()

Не обязательно вызывать. http://puu.sh/4X9CM.png

Код:
$seq = StringToBinary(_Crypt_HashData($gamma & $password,$CALG_SHA1))

_Crypt_HashData - Возвращает хеш в бинарном представлении, а не в строковом.

rusreg79
Подправьте скрипт и попробуйте еще раз, так как я я не знаю, в каком виде возвращает функция pack данные. (бинарном или строковом).
 
Автор
R

rusreg79

Продвинутый
Сообщения
159
Репутация
57
firex В справке php написано что pack упаковывает заданные аргументы в бинарную строку, с параметром "H*" - Hex-строка (Hex string) с верхнего разряда, и * для повторения до конца введенных данных. Для a, A, h, H число повторений определяет то, сколько символов взято от одного аргумента данных http://php.net/manual/ru/function.pack.php
 
Верх