Что нового

Как правильно заставить работать шифрование RC4 между autoit и php-скриптом

MadDog

Чайник
Сообщения
26
Репутация
0
В общем шифрую я данные

Код:
#include <Crypt.au3>


$hWnd="proverka raboty"
$pass="123"

;защифровали
$jjtt1 = _Crypt_EncryptData($hWnd, $pass, $CALG_RC4)
ConsoleWrite($jjtt1& @CRLF)

;расшифровали
$jjtt2 = BinaryToString(_Crypt_DecryptData($jjtt1, $pass, $CALG_RC4))
ConsoleWrite("без кодирования-"&$jjtt2& @CRLF)

выдаёт - 0x1175EA89CB4F04BCBBDFCE2C06A922

вот как правильно средствами PHP его раскодировать. Перепробовал всё что можно. Всё время получается не то !


вот библиотека для php
Код:
<?php 
/** 
 * Class RC4 
 * 
 * @category Crypt 
 * @author   Rafael M. Salvioni 
 */ 

/** 
 * Class RC4 
 * 
 * Implements the encrypt algorithm RC4. 
 * 
 * @category Crypt 
 * @author   Rafael M. Salvioni 
 * @see      http://pt.wikipedia.org/wiki/RC4 
 */ 
class RC4 
{ 
    /** 
     * Store the permutation vectors 
     * 
     * @var array 
     */ 
    private static $S = array(); 
     
    /** 
     * Swaps values on the permutation vector. 
     * 
     * @param int $v1 Value 1 
     * @param int $v2 Value 2 
     */ 
    private static function swap(&$v1, &$v2) 
    { 
        $v1 = $v1 ^ $v2; 
        $v2 = $v1 ^ $v2; 
        $v1 = $v1 ^ $v2; 
    } 
     
    /** 
     * Make, store and returns the permutation vector about the key. 
     * 
     * @param string $key Key 
     * @return array 
     */ 
    private static function KSA($key) 
    { 
        $idx = crc32($key); 
        if (!isset(self::$S[$idx])) { 
            $S   = range(0, 255); 
            $j   = 0; 
            $n   = strlen($key); 
            for ($i = 0; $i < 255; $i++) { 
                $char  = ord($key{$i % $n}); 
                $j     = ($j + $S[$i] + $char) % 256; 
                self::swap($S[$i], $S[$j]); 
            } 
            self::$S[$idx] = $S; 
        } 
        return self::$S[$idx]; 
    } 
     
    /** 
     * Encrypt the data. 
     * 
     * @param string $key Key 
     * @param string $data Data string 
     * @return string 
     */ 
    public static function encrypt($key, $data) 
    { 
        $S    = self::KSA($key); 
        $n    = strlen($data); 
        $i    = $j = 0; 
        $data = str_split($data, 1); 
        for ($m = 0; $m < $n; $m++) { 
            $i        = ($i + 1) % 256; 
            $j        = ($j + $S[$i]) % 256; 
            self::swap($S[$i], $S[$j]); 
            $char     = ord($data{$m}); 
            $char     = $S[($S[$i] + $S[$j]) % 256] ^ $char; 
            $data[$m] = chr($char); 
        } 
        $data = implode('', $data); 
        return $data; 
    } 
     
    /** 
     * Decrypts the data. 
     * 
     * @param string $key Key 
     * @param string $data Encripted data 
     * @return string 
     */ 
    public static function decrypt($key, $data) 
    { 
        return self::encrypt($key, $data); 
    } 
}
вот окно вывода
Код:
<?php 

include('RC4.php'); 

$string = "proverka raboty"; 
$key    = "123"; 

$crypt  = RC4::encrypt($key, $string); 
$dcrypt = RC4::decrypt($key, $crypt); 

echo " 
String: $string 
Key: $key 

Encripted Data: $crypt; 

Success: " . ($string == $dcrypt ? 'true' : 'false') . " 
"; 

?>
Как быть ?!
Просто хочу связать PHP и autoit шифрование между собой, а не получается :(
 
Автор
MadDog

MadDog

Чайник
Сообщения
26
Репутация
0
вопрос решил сам. Пришлось переписать алгоритм для autoit )
 

blacklis

Чайник
Сообщения
64
Репутация
1
Был удивлён, что проблему здесь так и не решили,а тс не поделился своим решением. Данный топик в топе гугла по запросу rc4 php autoit.
Потратил некоторое время на решение проблемы, писать реализации своих велосипедов шифрования не хотелось, так что хватило гугла.
Здесь http://www.autoitscript.com/forum/topic/66005-alternative-to-stringencrypt/ наш англоязычный коллега PsaltyDS любезно поделился своей альтернативой шифрования rc4, которое корректно работает со всеми стандартными решениями rc4, с которыми я его попробовал :-X
В общем, пользуйтесь
Стандартные функции из crypt.au3 из коробки не работали корректно ни с одной реализацией aes или rc4 на php из мною использованных. :beer:
 
Верх