php实现非对称加密

版权声明:本文为博主原创文章,未经博主允许不得转载。

使用非对称加密主要是借助openssl的公钥和私钥,用公钥加密私钥解密,或者私钥加密公钥解密。

1.安装opensslPHPopenssl扩展

2.生成私钥:openssl genrsa 用于生成rsa私钥文件,生成是可以指定私钥长度和密码保护

[python] view plain copy 

1. openssl genrsa -out rsa_private_key.pem 1024    


3.生成公钥:rsa命令用于处理RSA密钥、格式转换和打印信息

[python] view plain copy 

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


4.这里我们使用私钥加密,公钥解密

[python] view plain copy 

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扩展支持');      

12.       

13. (file_exists($privateKeyFilePath) && file_exists($publicKeyFilePath)) or die('密钥或者公钥的文件路径不正确');      

14. /**    

15. * 生成Resource类型的密钥,如果密钥文件内容被破坏,openssl_pkey_get_private函数返回false    

16. */      

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

18. /**    

19. * 生成Resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_public函数返回false    

20. */      

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

22.       

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

24. /**    

25. * 原数据    

26. */      

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

28. /**    

29. * 加密以后的数据,用于在网路上传输    

30. */      

31. $encryptData = '';      

32.       

33. echo '原数据为:', $originalData, PHP_EOL;      

34.       

35. ///////////////////////////////用私钥加密////////////////////////      

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

37.       

38.     /**    

39.      * 加密后 可以base64_encode后方便在网址中传输 或者打印  否则打印为乱码    

40.      */      

41.     echo '加密成功,加密后数据(base64_encode):', base64_encode($encryptData), PHP_EOL;      

42.       

43. } else {      

44.     die('加密失败');      

45. }      

46.       

47.       

48. ///////////////////////////////用公钥解密////////////////////////      

49.       

50. /**    

51. * 解密以后的数据    

52. */      

53. $decryptData ='';      

54.       

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

56.       

57.     echo '解密成功,解密后数据为:', $decryptData, PHP_EOL;      

58.       

59. } else {      

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

61. }      

你可能感兴趣的:(php实现非对称加密)