PHP使用HTML keygen公钥加密返回

时间:2011-07-07 13:19:32

标签: php html5 encryption key generator

如何使用HTML5的keygen中的公钥在PHP中加密 - 任何东西?那是否有标准功能?

提前致谢!

4 个答案:

答案 0 :(得分:2)

This post包含一些关于<keygen />的冗长文档,但对我来说,最大的收获肯定是IE中不支持此标记(任何版本);如果你可以忽略IE,那么该帖子应该有所帮助。

答案 1 :(得分:2)

选择的答案绝对不正确!

如果您使用 keygen 元素生成对称加密密钥,它将取消首先使用加密所提供的任何保护。

在不安全的通道上发送对称加密密钥是使用加密技术的首要规则之一。私钥就是私密的。更重要的是,不应将公钥用作加密密码,如果它是RSA密钥类型,它可用于加密数据和/或验证数据。

keygen 元素应该用于生成签名的公钥&amp;挑战首先创建一个私钥(RSA),该私钥被浏览器注册并用于提供 certificate based authentication

有关确认此答案的进一步研究,请参阅以下参考资料:

  1. KeyGen w/ PHP
  2. OpenSSL SPKAC documentation
  3. Certificate Signing Request
  4. PHP OpenSSL SPKAC patch (available within the latest master branch)
  5. Standalone patch for PHP OpenSSL extension for working natively with SPKAC's sent from the browsers KenGen element
  6. PHP documentation for SPKI

答案 2 :(得分:0)

您可以使用PHP中提供的mcrypt函数(如果您的服务器上有可用的库扩展) - 例如

您的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

答案 3 :(得分:0)

生成签名的公钥,也称为SPKAC。我知道使用它们的唯一简单方法是使用phpseclib, a pure PHP SPKAC implementation。例如

<?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'));