Пример #1
0
 static function encryptArray($message, RSA $rsa)
 {
     $rsa = $rsa->rsa;
     $rsaBytes = $rsa['size'] / 8;
     $messageLen = strlen($message);
     $code = '';
     // Массив разбивается на блоки, соответствующие размерности ключа
     for ($i = 0; $i < $messageLen; $i += $rsaBytes - 1) {
         $source = '0';
         $codeBlock = '';
         // Рассчитываем число из блока (2 байта 0х53 0х8А) -> число 0х538А -> десятичный!!! вид +100500
         // bc работает с десятиричной системой
         for ($k = 0; $k < $rsaBytes - 1 && $k + $i < $messageLen; $k++) {
             $source = bcadd(ord($message[$i + $k]), bcmul($source, 256));
         }
         // блок представляет из себя сгенерированное число
         // Это число шифруется при помощи ключей
         $block = RSA::encryptBlock($source, $rsa);
         // Разбираем число (зашифрованное значение) на байты
         for ($k = 0; $k < $rsaBytes; $k++) {
             $byte = bcmod($block, 256);
             $block = bcdiv($block, 256);
             $codeBlock = chr($byte) . $codeBlock;
         }
         $code .= $codeBlock;
         // Собираем зашифрованный массив
     }
     return $code;
 }