Побитовые операции над большими строками в PHP

Вот моя проблема. В настоящее время я пытаюсь реализовать несколько стандартов криптографии в PHP из соображений совместимости. Я сейчас работаю над SHA256 и SHA512. Оба они являются достаточно простыми стандартами, и у меня нет проблем с этим.

Однако SHA512 требует побитовых операций с 64-битными целыми числами. Поскольку PHP может иметь только 32-битные целые числа (при компиляции), это оставляет мне проблему. Как мне реализовать необходимые побитовые функции (по модулю, сдвиг, поворот, сложение, xor и, или, и т.д.), чтобы я поддерживал совместимость и разумный уровень производительности ...

Я знаю, что некоторые из них реализуют функции тривиально выполняются с 2 32-битными int. Однако, как это будет работать для сдвига и поворота ?

Я задумал сохранить строки в двоичной форме (как строку 01010 ). Таким образом, все побитовые операции будут полностью независимы от архитектуры. Но это, вероятно, вызовет резкое падение производительности, поскольку они невероятно часто используются в стандартах (и в других частях библиотеки).

Итак, мой вопрос: как я могу легко разрешить хотя бы 64-битные строковые операции в 32-битная компиляция PHP с сохранением разумного уровня производительности на каждом этапе ...?

О, и моя цель - переносимость здесь, поэтому никаких расширений. Я рассмотрю другие библиотеки, но они должны быть портативными ...

13
задан ircmaxell 4 April 2011 в 11:31
поделиться