zoukankan      html  css  js  c++  java
  • php使用openssl来实现RSA(非对称加密)

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

    1.安装openssl和PHP的openssl扩展

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

    1. openssl genrsa -out rsa_private_key.pem 1024  

    3.生成公钥:rsa命令用于处理RSA密钥、格式转换和打印信息
    1. openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem  

    4.这里我们使用私钥加密,公钥解密
    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 && $publicKeyor 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. }   
  • 相关阅读:
    通过百度地图API实现搜索地址--第三方开源--百度地图(三)
    对图片进行各种样式裁对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等剪:圆形、星形、心形、花瓣形等--第三方开源--CustomShapeImageView
    仿UC天气下拉和微信下拉眼睛头部淡入淡出--第三方开源--PullLayout
    【英语】Bingo口语笔记(14)
    【前端】HTML入门笔记
    【英语】Bingo口语笔记(13)
    【英语】20141013 生词
    【英语】20141011 生词
    【Android】Android 学习记录贴
    【英语】Bingo口语笔记(12)
  • 原文地址:https://www.cnblogs.com/hehe520/p/6147465.html
Copyright © 2011-2022 走看看