valyala за $200 я сам для себя напишу библиотеку на Си
Пиши
Лучше подскажи Что за ECB Mode такой, при шифровке, в часности в том же rc4
ECB (Electronic CodeBook) - режим простой замены. Обычно используется совместно с блочными алгоритмами шифрования. В этом режиме каждый блок открытого текста шифруется независимо от других блоков. Другими словами, ключ шифрования
K задает обратимое отображение
E(K): P -> P на множестве всевозможных блоков
P. Это означает, что одинаковые блоки открытого текста заменяются одинаковыми блоками шифртекста.
RC4 - синхронный потоковый криптоалгоритм, в котором используется режим
OFB (Output FeedBack) - обратной связи по выходу.
Кроме
ECB и
OFB существуют и другие режимы шифрования. Наиболее распространены
CBC (Cipher Block Chaining) - режим сцепления блоков шифртекста и
CFB (Cipher FeedBack) - гаммирование с обратной связью.
Net Dog, раз ты такой скупой, что не захотел дать мне $200, будешь должен бутылку пива

Вот то, что ты просил:
PHP:
/**
функция rc4_init_s($key)
инициализирует S-блок, необходимый для работы 8-битового
криптоалгоритма rc4, с помощью ключа $key
Возвращает инициализированнй S-блок
*/
function rc4_init_s($key) {
// инициализация вспомогательного массива $k
$k = unpack('C*', $key);
array_unshift($k, array_shift($k));
$n = sizeof($k);
$i = $n;
for ($i = $n; $i < 0x100; $i++) $k[$i] = $k[$i % $n];
for ($i--; $i >= 0x100; $i--) $k[$i & 0xff] ^= $k[$i];
// предварительное заполнение S-блока
$s = array();
for ($i = 0; $i < 0x100; $i++) $s[$i] = $i;
$j = 0;
// инициализация S-блока
for ($i = 0; $i < 0x100; $i++) {
$j = ($j + $s[$i] + $k[$i]) & 0xff;
// перестановка $s[$i] и $s[$j]
$tmp = $s[$i];
$s[$i] = $s[$j];
$s[$j] = $tmp;
}
return $s;
}
/**
функция rc4_crypt($text, $key)
выполняет шифрование/расшифрование текста/шифртекста $text
с помощью 8-битного потокового криптоалгоритма rc4, используя
в качестве ключа шифрования строку $key
Возвращает зашифрованный/расшифрованный текст/шифртекст
*/
function rc4_crypt($text1, $key) {
$s = rc4_init_s($key); // инициализация s-блока
$n = strlen($text1);
$text2 = '';
$i = $j = 0;
for ($k = 0; $k < $n; $k++) {
$i = ($i + 1) & 0xff;
$j = ($j + $s[$i]) & 0xff;
// перестановка $s[i] и $s[$j]
$tmp = $s[$i];
$s[$i] = $s[$j];
$s[$j] = $tmp;
// наложение/снятие гаммы
$text2 .= $text1{$k} ^ chr($s[$i] + $s[$j]);
}
return $text2;
}
/**
функция rc4_encrypt($plain_text, $password)
зашифровывает строку $plain_text с помощью 8-битового алгоритма
шифрования rc4, используя в качестве пароля строку $password
Возвращает base64-encoded шифртекст
*/
function rc4_encrypt($plain_text, $password) {
return base64_encode(rc4_crypt($plain_text, $password));
}
/**
функция rc4_decrypt($enc_text, $password)
расшифровывает base64-encoded шифртекст $enc_text с помощью
8-битового алгоритма шифрования rc4, используя в качестве
пароля строку $password
*/
function rc4_decrypt($enc_text, $password) {
return rc4_crypt(base64_decode($enc_text), $password);
}
-~{}~ 20.04.04 15:08:
Прочитал свои объяснения, что такое
ECB, и ничего не понял. Попытаюсь объяснить более доступным языком.

Пусть:
n – длина блока
P(i) –
i-й блок открытого текста,
C(i) –
i-й блок шифртекста
Ek(X) – функция шифрования блока
X
Dk(Y) – функция дешифрования блока
Y
X ^ Y – побитовая операция сложения по модулю 2 над блоками
X и
Y
X << b – логический сдвиг влево блока
X на
b бит
X >> b – логический сдвиг вправо блока
X на
b бит
X % Y – остаток от целочисленного деления числа
X на
Y
X | Y – побитовая операция логического ИЛИ над блоками
X и
Y.
Тогда режим
ECB можно представить так:
зашифрование: C(i) = Ek(P(i))
дешифрование: P(i) = Dk(C(i))
CBC:
зашифрование: C(i) = Ek(P(i) ^ C(i – 1))
дешифрование: P(i) = Dk(C(i)) ^ C(i – 1)
b-битовый
OFB (
b <= n):
зашифрование:
C(i) = (Ek(X) >> (n - b)) ^ P(i)
X = ((X << b) | C(i) ^ P(i)) % (1 << n)
дешифрование:
P(i) = (Ek(X) >> (n - b)) ^ C(i)
X = ((X << b) | C(i) ^ P(i)) % (1 << n)
b-битовый
CFB (
b <= n):
зашифрование:
C(i) = (Ek(X) >> (n – b)) ^ P(i)
X = ((X << b) | C(i)) % (1 << n)
дешифрование:
P(i) = (Ek(X) >> (n – b)) ^ C(i)
X = ((X << b) | C(i)) % (1 << n)
Режим простой замены (ECB) применяется для шифрования высокоэнтропийных данных (сессионные ключи, случайные или сжатые данные), для которых трудно реализовать атаку на основе открытого текста.
Режим сцепления блоков шифртекста (CBC) применяется в случаях, когда необходимо скрыть структуру открытого текста. Используется в большинстве современных программ шифрования файлов.
С помощью режима обратной связи по шифртексту (CFB) блочный шифр преобразуется в самосинхронизирующийся потоковый шифр. Используется в тех случаях, когда размер шифруемых данных может быть меньше размера блока шифртекста. Например, при защищенной передаче информации по открытым каналам связи (vpn).
С помощью режима обратной связи по выходу (OFB) блочный шифр преобразуется в синхронный потоковый шифр. Используется в случаях, когда необходима предварительная генерация гаммы (псевдослучайной последовательности, которая зависит только от ключа шифрования, накладываемой на открытый текст с помощью побитовой операции сложения по модулю 2).