Ну чисто теоретически можно резать строку на блоки по 4 символа, преобразовывать их в числа, с числами проводить необходимые операции, затем снова преобразовывать в строки и склеивать их вместе. Функции
unpack() и
pack() в этом могут помочь.
Без массивов получится. А все операции с числами, включая перестановки бит, делаются с помощью битовых операций &, |, !, ^. Ну и умножение/деление на 2 для управления сдвигаемым битом.
Но, положа руку на сердце, PHP-не лучший вариант для реализации криптоалгоритмов.