回答
選定的答案是錯誤的!
如果您使用keygen元素來生成對稱加密密鑰,它將首先取消使用加密提供的任何保護。
通過不安全的通道發送對稱加密密鑰是使用加密的第一條規則。私人鑰匙就是這樣,私人的。更重要的是公鑰不應該被用作加密密碼,它可以用來加密數據和/或驗證數據,如果它是RSA密鑰類型的話。
的凱基元素應該被用來生成首先創建其被註冊,並通過瀏覽器來提供certificate based authentication私鑰(RSA)一個簽名的公鑰&挑戰。
要做進一步的研究證實這個答案,請參閱以下參考資料:
This post包括一些關於<keygen />
的冗長的文檔,但對我來說最大的收穫肯定是這個標籤在IE(任何版本)中不被支持;如果你能忽略掉IE,那麼這個帖子應該會有所幫助。
您可以使用可用的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
keygen生成SPKAC格式的公鑰。第一組字節將是相同的,並且不同的字節不會有儘可能多的變化。使用SPKAC作爲對稱密碼的關鍵字可能會將安全性的有效字節數從原來的128個減少到大約50個。 – neubert
這絕對是錯誤的答案。要使用從<keygen>元素提交的值非常不安全。 您基本上只是通過公共通道發送用於加密的密碼,因此否定了您通過對稱加密獲得的任何安全性。 SPKAC(簽名的公鑰和質詢)將用於證書認證,而不是用作對稱加密密鑰。 –
簽署生成公鑰,還千牛擁有SPKACs。我知道使用它們的唯一簡單方法是使用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'));
這實際上是正確的答案。幫助了我很多。非常感謝:) – JohnKiller
您現在可以通過調用['openssl_export()'](1)發送給服務器的SPKAC值來使用PHP的OpenSSL擴展(本機支持)。 [1] http://php.net/manual/en/function.openssl-spki-export.php –
- 1. 私鑰/公鑰ssh-keygen -t rsa
- 2. 公鑰加密
- 3. 公鑰加密
- 4. 私鑰加密公鑰加密
- 5. RSA加密公鑰?
- 6. 公鑰加密的密鑰庫
- 7. PHP openssl加密解密錯誤?無效的公鑰/私鑰?
- 8. Java生成的公鑰和ssh-keygen生成的密鑰之間的區別
- 9. 不從容器返回的RSA加密公鑰?
- 10. iPhone公鑰加密SecKeyEncrypt返回錯誤9809(errSSLCrypto)
- 11. 作爲公鑰使用返回的密鑰的問題長於私有密鑰
- 12. 將PHP RSA公共密鑰轉換爲Android公共密鑰
- 13. 對稱和公鑰加密
- 14. Bouncycastle:用公鑰加密
- 15. 加密使用公鑰
- 16. RSA公鑰加密openssl
- 17. Gpg使用公鑰加密
- 18. RSA使用公鑰加密
- 19. C/C++加密/與公鑰
- 20. 公鑰郵件加密
- 21. RSA加密基於公鑰
- 22. X509證書公鑰加密
- 23. keygen標籤的私鑰
- 24. 在Java中的ssh-keygen命令從私鑰中提取公鑰
- 25. 帶私鑰/公鑰的EPub加密
- 26. 使用RSA公鑰加密DSA私鑰
- 27. Python:Pycrypto RSA公共密鑰加密錯誤
- 28. 加密密碼(RSA)與公鑰
- 29. 任何php加密密鑰?
- 30. 祕密密鑰分配與Diffie-Hellman的公鑰加密
就像其他人所說的那樣,目前還沒有用keygen支持IE。 –