關於php的openssl 加密解密以及數字簽名

2021-07-15 14:46:26 字數 1910 閱讀 3458

openssl genrsa -out rsa_private_key.pem 1024

openssl pkcs8 -topk8 -inform pem -in rsa_private_key.pem -outform pem -nocrypt -out private_key.pem

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

第一條命令生成原始 rsa私鑰檔案 rsa_private_key.pem,第二條命令將原始 rsa私鑰轉換為 pkcs8格式,第三條生成rsa公鑰 rsa_public_key.pem

從上面看出通過私鑰能生成對應的公鑰,因此我們將私鑰private_key.pem用在伺服器端,公鑰發放給android跟ios等前端。

上php**:

<?php  

$privatekeyfilepath = 'rsa_private_key.pem';  

/** 

* 公鑰檔案的路徑 

*/  

$publickeyfilepath = 'rsa_public_key.pem';  

extension_loaded('openssl') or die('php需要openssl擴充套件支援');  

(file_exists($privatekeyfilepath) && file_exists($publickeyfilepath))  or die('金鑰或者公鑰的檔案路徑不正確');  

/** 

* 生成resource型別的金鑰,如果金鑰檔案內容被破壞,openssl_pkey_get_private函式返回false 

*/  

$privatekey = openssl_pkey_get_private(file_get_contents($privatekeyfilepath));  

if(openssl_sign('hello', $out, $privatekey))

var_dump(base64_encode($out));

die;

/** 

* 生成resource型別的公鑰,如果公鑰檔案內容被破壞,openssl_pkey_get_public函式返回false 

*/  

$publickey = openssl_pkey_get_public(file_get_contents($publickeyfilepath));  

($privatekey && $publickey) or die('金鑰或者公鑰不可用');  

/** 

* 原資料 

*/  

$originaldata = '我的帳號是:admin,密碼是:123456';  

/** 

* 加密以後的資料,用於在網路上傳輸 

*/  

$encryptdata = '';  

echo '原資料為:', $originaldata, php_eol;  

///用私鑰加密  

if (openssl_private_encrypt($originaldata, $encryptdata, $privatekey)) 

else  

///用公鑰解密  

/** 

* 解密以後的資料 

*/  

$decryptdata ='';  

if (openssl_public_decrypt($encryptdata, $decryptdata, $publickey)) 

else  

?>

一般使用的時候,看銀聯是先數字簽名,簽名是私鑰簽名,公鑰驗證。然後用私鑰進行加密,對方用公鑰解密。關於什麼時候加密,這個

自行斟酌,對於一些敏感資料應該進行加密,可以對整個結構體資料進行簽名。

PHP的openssl加密擴充套件使用小結

網際網路的發展史上,安全性一直是開發者們相當重視的乙個主題,為了實現資料傳輸安全,我們需要保證 資料 非偽造請求 資料完整性 沒有被人修改過 資料私密性 密文,無法直接讀取 等。雖然現在已經有ssl tls協議實現的https協議,但是因在客戶端上依賴瀏覽器的正確實現,而且效率又很低,所以一般的敏感...

PHP的openssl加密擴充套件使用小結

網際網路的發展史上,安全性一直是開發者們相當重視的乙個主題,為了實現資料傳輸安全,我們需要保證 資料 非偽造請求 資料完整性 沒有被人修改過 資料私密性 密文,無法直接讀取 等。雖然現在已經有ssl tls協議實現的https協議,但是因在客戶端上依賴瀏覽器的正確實現,而且效率又很低,所以一般的敏感...

PHP的openssl加密擴充套件使用小結

對稱加密 salt 123456 flag function exists openssl encrypt yy openssl get cipher methods var dump yy vv 你好 tt openssl encrypt vv,yy 58 salt var dump tt jie...