Преобразование открытого ключа RSA, сгенерированного OpenSSL, в формат OpenSSH (PHP)

Некоторое время я пытался сгенерировать пару ключей RSA с помощью PHP openssl расширение и сохраните результат как пару ключей, совместимую с OpenSSH - это означает, что закрытый ключ закодирован в PEM (что легко), а открытый ключ хранится в специальном формате OpenSSH следующего вида:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABA...more base64 encoded stuff...

Насколько мне удалось собрать этот формат состоит из:

  • тип ключа в открытом тексте, за которым следует пробел (например, "openssh-rsa"
    • длина имени алгоритма в байтах (в данном случае 7), закодированного как 32-битное беззнаковое long big endian
    • имя алгоритма, в данном случае 'ssh-rsa'
    • длина RSA 'e 'число в байтах, закодированное как 32-битное беззнаковое long big endian
    • RSA' e 'число
    • длина числа RSA' n 'в байтах, закодировано как 32-битное беззнаковое long big endian
    • RSA 'n' number

Я пробовал реализовать это с помощью функции PHP pack (), но независимо от того, что я пробую, результат никогда не будет эквивалентен тому, что я получаю от использования ssh-keygen -y -f для того же закрытого ключа RSA, сгенерированного openssl.

Вот упрощенная версия моего кода:

Теперь я ищу селектор ...

Возьмите следующий схематический html-код:

<div>
  <span id='1' cust-attr='' />
  <span id='2' />
  <span id='3' cust-attr='Foo' />
</div>

Теперь я ищу селектор, который находит все span , которые либо не имеют атрибут cust-attr или чье значение cust-attr пусто.
В данном случае это будут 1 и 2.

Я попробовал следующие селекторы и получил следующие результаты:

  1. span [cust-attr! =] выбирает 2 и 3
  2. span [cust- attr = ''] выбирает только 1
  3. диапазон: not ([cust-attr]) выбирает 2
  4. диапазона (: not ([cust-attr]), [cust-attr = ' ']) выбирает все три
  5. диапазона ([cust-attr =' '] ,: not ([cust-attr])) выбирает 1

Однако я не нашел ни одного, выбирающего только 1 и 2.
Знаете ли вы возможность?

Обратите внимание, что я хочу избежать:

span:not([cust-attr]),span[cust-attr='']

поскольку «диапазон» в действительности является более сложным выражением.

6
задан Pavithra Gunasekara 2 April 2011 в 15:53
поделиться