PHP зашифрованный возврат с открытым ключом HTML keygen - PullRequest
1 голос
/ 07 июля 2011

Как я могу зашифровать - что угодно - в PHP с помощью открытого ключа, который я получаю из keygen HTML5? Есть ли стандартная функция для этого?

Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 27 марта 2014

Выбранный ответ является абсолютно неверным!

Если вы используете элемент keygen для генерации симметричного ключа шифрования, это сведет на нет все меры защиты, предлагаемые с использованием шифрования.

Отправка симметричного ключа шифрования по небезопасному каналу является одним из первых правил использования криптографии.Закрытые ключи - это всего лишь частные.Более того, открытый ключ не должен использоваться в качестве пароля шифрования, его можно использовать для шифрования данных и / или проверки данных, если это тип ключа RSA.

Элемент keygen должен бытьиспользуется для генерации подписанного открытого ключа и вызова , сначала создавая закрытый ключ (RSA), который регистрируется и используется браузером для обеспечения аутентификации на основе сертификатов .

Дальнейшие исследования, подтверждающие этот ответ, см. В следующих ссылках:

  1. KeyGen с PHP
  2. Документация OpenSSL SPKAC
  3. Запрос на подпись сертификата
  4. Патч PHP OpenSSL SPKAC (доступно в последней ветке master)
  5. Автономное исправление для расширения PHP OpenSSL для нативной работы с SPKAC, отправленными из браузера. Элемент KenGen
  6. PHP документация для SPKI
2 голосов
/ 07 июля 2011

Этот пост включает в себя некоторую длинную документацию по <keygen />, но для меня самым большим выводом будет то, что этот тег не поддерживается в IE (любой версии);если вы можете игнорировать IE, тогда этот пост должен помочь.

0 голосов
/ 19 декабря 2012

генерирует подписанные открытые ключи, также известные как SPKAC. Единственный простой способ их использования - использовать phpseclib, чистую реализацию PHP SPKAC . например.

<?php
include('File/X509.php');
include('Crypt/RSA.php');

$x509 = new File_X509();
$x509->loadSPKAC('MIIBQzCBrTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwnnEID0RuUfmVbB1rNgsZ6BL8MtITio00wLJhQ075cvxcgllis1M4PhK6SKtm0tmSfXZTZz8jrbeczSFkdl6UjFYCXIrxnmcGmpB4A6fdKsBfFtmMOPLXLr5nGM+4DyOMZCZObbLOnsv7usimDpixk+juZ65Gmhb9rB+2MAKEbECAwEAARYJMTIzNDU2Nzg5MA0GCSqGSIb3DQEBBAUAA4GBAB99Nkdhzeazy0bTCb69Mp8Q3BDOgeMonUEg0ETlPaTX/y9HvwkgWHdMROQmc8JiDNTZZzpssrgdKtzsqQOyEIOHEKDbAXL3+GlglCaQ3g/72PbJPFusYdsPjEPYKXil6U1nCikikjaEZVM1HbzVFSmbEAuLwYwD1Z6LovYYaxr0');

$pubkey = (string) $x509->getPublicKey();
$rsa = new Crypt_RSA();
$rsa->loadKey($pubkey);
echo bin2hex($rsa->encrypt('whatever'));
0 голосов
/ 07 июля 2011

Вы можете использовать функции mcrypt, доступные в PHP (если у вас есть расширение библиотеки, доступное на вашем сервере) - например,

Ваша HTML-форма имеет поле: <keygen name="mykey" />

ВашPHP может сделать что-то вроде: (не проверено)

$myKey = $_POST['mykey']; // this is your posted keygen value
$encryptThis = 'This is the text I want to encrypt';
$cipher = MCRYPT_BLOWFISH;
$mode = MCRYPT_MODE_ECB;
$iv_size = mcrypt_get_iv_size($cipher, $mode);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encOutput = mcrypt_encrypt($cipher, $myKey, $encryptThis, $mode, $iv);

// your encrypted text is now in the variable $encOutput

Подробнее о mcrypt смотрите: http://uk3.php.net/manual/en/book.mcrypt.php

...