Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2015, 20:03   #1
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию RC4 на VB6 и PHP различаются =?

Здравствуйте уважаемые форумчане, у меня проблема следующего характера.
Есть PHP кодировщик строки в RC4 стандартный из интернета следующего содержания (его код)
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(0255);
            
$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($data1);
        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);
    }
}

И есть код на Visual Basic 6, который делает тоже самое - кодирует строку в RC4. (стандартный из интернета)
PHP код:
Public Function RC4(ByVal Data As StringByVal Password As String) As String ' This is a Modified RC4 Function ^^
On Error Resume Next
Dim F(0 To 255) As Integer, X, Y As Long, Key() As Byte
Key() = StrConv(Password, vbFromUnicode)
For X = 0 To 255
    Y = (Y + F(X) + Key(X Mod Len(Password))) Mod 256
    F(X) = X
Next X
Key() = StrConv(Data, vbFromUnicode)
For X = 0 To Len(Data)
    Y = (Y + F(Y) + 1) Mod 256
    Key(X) = Key(X) Xor F(Temp + F((Y + F(Y)) Mod 254))
Next X
RC4 = StrConv(Key, vbUnicode)
End Function 
Дело в том что оба алгоритма обратимые. И должны возвращать одинаковый результат при одной и той же строке и пароле. Если строку закодировать на PHP, этой же функцией она раскодируется без проблем через эту функцию только на PHP.
Такая же тема и с Visual Basic 6, то же самое. Почему у этих функций результат разный ?
Суть проблемы в том что при кодировке одинаковой строки, в PHP и VB6 получаются разные шифрованные данные.
Подскажите, где подводные камни ?
Мне нужно чтоб код на PHP выдавал точно такой же результат, чтоб на приложение на VB6 могло его расщифровать без проблем.
Всем ответившим большое спасибо за любую помошь.
Если нужно приложу исходники проекта.
denis76560 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
с# и с++ по синтаксису различаются? quarty Помощь студентам 4 25.01.2011 10:40
vb6 ULIA92 Помощь студентам 0 22.04.2010 12:13
Шифрование алгоритмом RC4 Alexteks Общие вопросы Delphi 0 05.05.2009 09:41
Чем различаются функции чтения класса istream C++ Go6a Помощь студентам 3 25.04.2008 11:04
RC4 Biggelow Общие вопросы Delphi 9 12.07.2007 13:48