php實(shí)現(xiàn)非對(duì)稱(chēng)加密

使用非對(duì)稱(chēng)加密主要是借助openssl的公鑰和私鑰,用公鑰加密私鑰解密,或者私鑰加密公鑰解密。

1.安裝openssl和PHP的openssl擴(kuò)展

2.生成私鑰:openssl genrsa用于生成rsa私鑰文件,生成是可以指定私鑰長(zhǎng)度和密碼保護(hù)

[Python]view plaincopy

1.?openssl?genrsa?-out?rsa_private_key.pem?1024

3.生成公鑰:rsa命令用于處理RSA密鑰、格式轉(zhuǎn)換和打印信息

[python]view plaincopy

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

4.這里我們使用私鑰加密,公鑰解密

[python]view plaincopy

1.?PHP

2.?/**

3.?*密鑰文件的路徑

4.?*/

5.?$privateKeyFilePath?=?'rsa_private_key.pem';

6.?/**

7.?*公鑰文件的路徑

8.?*/

9.?$publicKeyFilePath?=?'rsa_public_key.pem';

10.

11.?extension_loaded('openssl')?or?die('php需要openssl擴(kuò)展支持');

12.

13.?(file_exists($privateKeyFilePath)?&&?file_exists($publicKeyFilePath))?or?die('密鑰或者公鑰的文件路徑不正確');

14.?/**

15.?*生成Resource類(lèi)型的密鑰,如果密鑰文件內(nèi)容被破壞,openssl_pkey_get_private函數(shù)返回false

16.?*/

17.?$privateKey?=?openssl_pkey_get_private(file_get_contents($privateKeyFilePath));

18.?/**

19.?*生成Resource類(lèi)型的公鑰,如果公鑰文件內(nèi)容被破壞,openssl_pkey_get_public函數(shù)返回false

20.?*/

21.?$publicKey?=?openssl_pkey_get_public(file_get_contents($publicKeyFilePath));

22.

23.?($privateKey?&&?$publicKey)?or?die('密鑰或者公鑰不可用');

24.?/**

25.?*原數(shù)據(jù)

26.?*/

27.?$originalData?=?'加密前hahahaha';

28.?/**

29.?*加密以后的數(shù)據(jù),用于在網(wǎng)路上傳輸

30.?*/

31.?$encryptData?=?'';

32.

33.?echo?'原數(shù)據(jù)為:',?$originalData,?PHP_EOL;

34.

35.?///////////////////////////////用私鑰加密////////////////////////

36.?if?(openssl_private_encrypt($originalData,?$encryptData,?$privateKey))?{

37.

38.?????/**

39.??????*加密后可以base64_encode后方便在網(wǎng)址中傳輸或者打印否則打印為亂碼

40.??????*/

41.?????echo?'加密成功,加密后數(shù)據(jù)(base64_encode后)為:',?base64_encode($encryptData),?PHP_EOL;

42.

43.?}?else?{

44.?????die('加密失敗');

45.?}

46.

47.

48.?///////////////////////////////用公鑰解密////////////////////////

49.

50.?/**

51.?*解密以后的數(shù)據(jù)

52.?*/

53.?$decryptData?='';

54.

55.?if?(openssl_public_decrypt($encryptData,?$decryptData,?$publicKey))?{

56.

57.?????echo?'解密成功,解密后數(shù)據(jù)為:',?$decryptData,?PHP_EOL;

58.

59.?}?else?{

60.?????die('解密成功');

61.?}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容