CrashX
В прошлом XSiteCMS
- Регистрация
- 6 Июн 2008
- Сообщения
- 681
- Реакции
- 114
- Автор темы
- #1
Нужен быстрый метод шифрования
может есть алгоритм более быстрый, без использования доп библиотек php типа mycrypt
имеющиеся
этот хорош, но более долгий, RC4 быстрее почти в 2 раза
RC4, хорош, но недостаточно быстр
может есть алгоритм более быстрый, без использования доп библиотек php типа mycrypt
имеющиеся
этот хорош, но более долгий, RC4 быстрее почти в 2 раза
PHP:
/**
* Класс шифрования данных
*/
class Encryption {
var $key = 'SUPER_KEY';
function encrypt($string) {
$result = null;
for ($i = 0; $i < strlen($string); $i++):
$char = substr($string, $i, 1);
$keychar = substr($this->key, ($i % strlen($this->key)) - 1, 1);
$char = chr(ord($char) + ord($keychar));
$result.=$char;
endfor;
return base64_encode($result);
}
function decrypt($string) {
$result = null;
$string = base64_decode($string);
for ($i = 0; $i < strlen($string); $i++):
$char = substr($string, $i, 1);
$keychar = substr($this->key, ($i % strlen($this->key)) - 1, 1);
$char = chr(ord($char) - ord($keychar));
$result.=$char;
endfor;
return $result;
}
}
RC4, хорош, но недостаточно быстр
PHP:
/**
* Класс реализующий алгоритм шифрования RC4
* @see http://ru.wikipedia.org/wiki/RC4
*/
class RC4 {
private $S = array();
private function swap(&$v1, &$v2) {
$v1 = $v1 ^ $v2;
$v2 = $v1 ^ $v2;
$v1 = $v1 ^ $v2;
}
private function KSA($key) {
$idx = crc32($key);
if (!isset($this->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;
$this->swap($S[$i], $S[$j]);
}
$this->S[$idx] = $S;
}
return $this->S[$idx];
}
public function encryptRC4($data, $key) {
$S = $this->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;
$this->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;
}
public function decryptRC4($data, $key) {
return $this->encryptRC4($data, $key);
}
}