Вот моя проблема. В настоящее время я пытаюсь реализовать несколько стандартов криптографии в PHP по соображениям совместимости. Тот, над которым я сейчас работаю, - SHA256 и SHA512. Они оба достаточно прямолинейные стандарты, и у меня нет проблем с этим.
Однако SHA512 требует побитовых операций над 64-битными целыми числами. Поскольку PHP может иметь только 32-битные целые числа (с компиляцией), это оставляет мне проблему. Как реализовать побитовые функции, необходимые (modulo, shift, rotate, add, xor, and, or, и т.д.), Так что я поддерживаю совместимость и разумный уровень производительности...
Я знаю, что для некоторых из них реализация функций тривиально выполняется с помощью 32-битных ints. Однако как это работает для shift
и rotate
?
То, что я думал делать, это хранить строки в двоичной форме (в виде строки 01010
). Таким образом, все побитовые операции будут полностью независимыми от архитектуры. Но это, вероятно, вызовет значительное падение производительности, поскольку они используются невероятно часто в стандартах (и в других частях библиотеки).
Итак, мой вопрос заключается в следующем: как я могу легко разрешить по меньшей мере 64-разрядные операции с строками в 32-битной компиляции PHP, сохраняя при этом приемлемый уровень производительности для каждого шага...?
О, и моя цель - переносимость здесь, поэтому никаких расширений. Другие библиотеки, которые я рассмотрю, но они должны быть переносимыми...