我需要一點點的項目,我已經建立在晚上做。
我們知道下面創建一個新的關鍵對(公/私):
open_ssl_pkey_export()做密碼魔術。因此,我們可以將密碼更改爲:
function changePassphrase ($private, $old, $new=null) {
$res = openssl_pkey_get_private ($private, $old);
if ($res === false) {
throw new Exception ("Loading private key failed: ".openssl_error_string());
return false;
}
if (openssl_pkey_export ($res, $result, $new) === false) {
throw new Exception ("Passphrase change failed: ".openssl_error_string());
return false;
}
return $result;
}
我希望您可以按照我們在此處所做的操作...! (顯然,異常拋出純粹是可選的...我剛剛拉開代碼逐字從我的代碼庫。)
changePassphrase()將私鑰作爲字符串,與現有的和新的密碼短語一起。我們使用openssl_pkey_get_private()來檢索私鑰的句柄,並用舊口令解鎖它。 (值得注意的是密碼短語實際上是用來加密私鑰的,這聽起來有點雙重荷蘭![加密加密密鑰......?] openssl_pkey_get_private()返回FALSE如果它不能解釋密鑰 - 即密碼是否錯誤,私鑰解密爲無效值?)
解鎖了舊密碼的私鑰後,我們將OpenSSL密鑰句柄傳遞給openssl_pkey_export( ) - 就像我們在第一次創建它之後(通過openssl_pkey_new())提供新的密碼...和嘿 - presto一樣。
我希望我的代碼示例能夠乾淨地閱讀,我試圖以易於理解和遵循的方式編寫它,而不必進行不必要的「壓縮」和快捷方式。
祝你好運!
我已經在OpenSSL郵件列表和Freenode的## PHP頻道上連續詢問過,但都無濟於事。 我在這裏提出錯誤的問題,或者在這種情況下改變密碼短語根本不可能不通過PHP的system()函數直接調用OpenSSL? –
你是絕對**不**問錯誤的問題!這是一個很好的問題,我有一點震驚沒有人回答(直接使用PHP的OpenSSL綁定)。我希望我的回答爲你清除它! – wally