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...