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