`
wangking717
  • 浏览: 262436 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

PHP RSA加密解密实例

 
阅读更多

PHP服务端与客户端交互、提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密

 

1、加密解密的第一步是生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以)

下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令:

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用在服务器端,公钥发放给AndroidiOS等前端

 

2、php中用生成的公钥、私钥进行加密解密,直接上代码

<?php  
$private_key = '-----BEGIN RSA PRIVATE KEY-----  
MIICXQIBAAKBgQC3//sR2tXw0wrC2DySx8vNGlqt3Y7ldU9+LBLI6e1KS5lfc5jl  
TGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2klBd6h4wrbbHA2XE1sq21ykja/  
Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o2n1vP1D+tD3amHsK7QIDAQAB  
AoGBAKH14bMitESqD4PYwODWmy7rrrvyFPEnJJTECLjvKB7IkrVxVDkp1XiJnGKH  
2h5syHQ5qslPSGYJ1M/XkDnGINwaLVHVD3BoKKgKg1bZn7ao5pXT+herqxaVwWs6  
ga63yVSIC8jcODxiuvxJnUMQRLaqoF6aUb/2VWc2T5MDmxLhAkEA3pwGpvXgLiWL  
3h7QLYZLrLrbFRuRN4CYl4UYaAKokkAvZly04Glle8ycgOc2DzL4eiL4l/+x/gaq  
deJU/cHLRQJBANOZY0mEoVkwhU4bScSdnfM6usQowYBEwHYYh/OTv1a3SqcCE1f+  
qbAclCqeNiHajCcDmgYJ53LfIgyv0wCS54kCQAXaPkaHclRkQlAdqUV5IWYyJ25f  
oiq+Y8SgCCs73qixrU1YpJy9yKA/meG9smsl4Oh9IOIGI+zUygh9YdSmEq0CQQC2  
4G3IP2G3lNDRdZIm5NZ7PfnmyRabxk/UgVUWdk47IwTZHFkdhxKfC8QepUhBsAHL  
QjifGXY4eJKUBm3FpDGJAkAFwUxYssiJjvrHwnHFbg0rFkvvY63OSmnRxiL4X6EY  
yI9lblCsyfpl25l7l5zmJrAHn45zAiOoBrWqpM5edu7c  
-----END RSA PRIVATE KEY-----';  
  
$public_key = '-----BEGIN PUBLIC KEY-----  
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt  
3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2kl  
Bd6h4wrbbHA2XE1sq21ykja/Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o  
2n1vP1D+tD3amHsK7QIDAQAB  
-----END PUBLIC KEY-----';  
  
//echo $private_key;  
$pi_key =  openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id  
$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的  
print_r($pi_key);echo "\n";  
print_r($pu_key);echo "\n";  
  
  
$data = "aassssasssddd";//原始数据  
$encrypted = "";   
$decrypted = "";   
  
echo "source data:",$data,"\n";  
  
echo "private key encrypt:\n";  
  
openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密  
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的  
echo $encrypted,"\n";  
  
echo "public key decrypt:\n";  
  
openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来  
echo $decrypted,"\n";  
  
echo "---------------------------------------\n";  
echo "public key encrypt:\n";  
  
openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密  
$encrypted = base64_encode($encrypted);  
echo $encrypted,"\n";  
  
echo "private key decrypt:\n";  
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密  
echo $decrypted,"\n";  

 

转自:http://blog.csdn.net/clh604/article/details/20224735

分享到:
评论

相关推荐

    php rsa加密解密实例

    总的来说,理解并掌握PHP中的RSA加密解密技术以及OpenSSL的使用对于保障应用程序的数据安全具有重要意义。通过实践这些实例,开发者可以更好地理解和运用这些工具,提升其在网络安全领域的专业能力。

    C# RSA加密解密

    **C# RSA加密解密详解** 在信息安全领域,加密技术是一种至关重要的手段,用于保护数据的隐私和安全性。RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,广泛应用于网络通信、数据存储等领域。C#作为.NET...

    兼容JS和C#的RSA加密解密实例

    在给定的"兼容JS和C#的RSA加密解密实例"中,我们关注的是如何在JavaScript(前端)和C#(后端)之间使用RSA进行安全的数据交换。这涉及到两个主要的方面:前端的加密和后端的解密。 前端部分,JavaScript通常用于...

    RSA加密解密(C#)实现

    RSA加密解密C#实现调用实例 public string RSAEncrypt(string xmlPublicKey, string m_strEncryptString) { try { byte[] PlainTextBArray; byte[] CypherTextBArray; string Result; System.Security....

    RSA加密解密实例

    在本文中,我们将深入探讨RSA加密解密机制及其重要性。 RSA的名字来源于其三位发明者:Ron Rivest、Adi Shamir 和 Leonard Adleman。它基于大数因子分解的困难性,即给定一个大合数,找到它的两个素数因子是极其...

    Java实现的RSA加密解密算法示例

    本文主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了Java RSA加密解密算法的相关实现技巧。 知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard ...

    易语言调用JSEncrypt实现RSA加密解密

    在易语言中调用JSEncrypt库来实现RSA加密解密,可以为易语言的应用增加一层安全防护。 JSEncrypt是一个JavaScript库,由Benjamin van Ryseghem开发,主要用于RSA加密操作,特别适用于前端与后端之间的安全通信。它...

    unity工具类RSA加密和解密

    本文将深入探讨RSA加密和解密的基础知识以及如何在Unity中实现这一功能。 首先,RSA加密的核心原理是基于大整数因子分解的困难性。它生成一对密钥:公钥和私钥。公钥可以公开,用于加密;而私钥必须保密,用于解密...

    RSA加密解密示例工程

    RSA加密解密示例工程是一个专门针对Android平台设计的学习资源,旨在帮助开发者深入理解并实践RSA加密算法。RSA,全称Rivest-Shamir-Adleman,是一种非对称加密技术,广泛应用于网络安全、数据保护等领域。该示例...

    JAVA实现RSA加密解密

    在Java中实现RSA加密解密,可以帮助开发者保护敏感信息,例如在网络传输过程中防止数据被窃取。 首先,了解RSA的工作原理至关重要。它基于两个大素数的乘积,生成一对密钥:公钥和私钥。公钥可以公开,用于加密信息...

    Delphi RSA加密算法实例.rar

    本实例是基于Delphi编程环境实现的一个无第三方控件依赖的RSA加密程序,它提供了生成随机数、创建密钥对以及进行加密解密操作的功能。 首先,RSA算法的核心在于大素数的选择和欧拉函数。在Delphi中,我们可以通过...

    RSA加密解密实例(源码)(内实现大数加密解密)

    在这个实例中,我们看到有C++编写的RSA加密解密代码,它在两个不同的开发环境中运行:Windows Mobile平台下的Visual Studio 2005以及使用较旧的Visual C++ 6.0。这些源码提供了实现大数加密解密的示例,大数是指超出...

    Delphi RSA加解密【支持RSA公钥加密私钥解密,RSA私钥加密公钥解密,秘钥格式支持PKCS8和PKCS1】D7~XE10可用

    本例中的Project1.exe可能是一个Delphi编译的示例应用程序,展示了如何在Delphi环境中使用RSA加密和解密。这个程序应该演示了如何生成RSA密钥对,使用公钥加密数据,然后使用私钥解密,反之亦然。在实际应用中,公钥...

    RSA加密解密java实例

    在Eclipse中,你可以创建一个新Java类,将以上代码复制进去,然后运行来测试RSA加密解密的功能。同时,确保Maven项目已经正确配置并导入了所有必要的依赖。如果遇到任何问题,可以检查`pom.xml`文件,确保包含如下的...

    C# .net版 RSA 公钥加密私钥解密 私钥加密公钥解密

    - RSA加密过程是不可逆的,因此在使用前需确认加密和解密的对象匹配。 在给出的链接中(https://blog.csdn.net/qq_37835111/article/details/87358779),作者提供了一个具体的示例,演示了如何在C# .NET环境下...

    Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例

    ### Python3 加密解密库Crypto的RSA加解密与签名/验签实现方法实例 #### 一、引言 本篇文章重点介绍如何利用...通过本文提供的实例,读者可以更深入地了解并掌握Python3中`Crypto`库的RSA加密解密和签名/验签功能。

    RSA加解密(c语言实现).zip

    在这个“RSA加解密(C语言实现).zip”文件中,我们可以期待找到一个用C语言编写的RSA加密和解密的实现。 首先,RSA的核心原理是基于大数因子分解的困难性。它使用两个大素数p和q生成一对密钥:公钥和私钥。公钥...

    RSA.zip_RSA CSharp _RSA算法实例_RSA解密_rsa_rsa加密解密

    在C#中,我们可以使用`System.Security.Cryptography.RSACryptoServiceProvider`类来处理RSA加密解密。首先,我们需要创建一个RSA实例,然后生成或加载公钥和私钥。公钥可以公开分享,而私钥必须保密。 ```csharp ...

    Android RSA 加密解密Demo

    本文将深入探讨Android平台上的RSA加密解密技术,并基于提供的"Android RSA 加密解密Demo"进行详细讲解。 首先,RSA加密算法基于大数因子分解的难题,由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出。它...

    java RSA加密解密

    在Java中,我们可以通过以下步骤实现RSA加密解密: 1. **生成密钥对**: - 使用`KeyPairGenerator`类的`getInstance("RSA")`方法获取RSA密钥对生成器。 - 调用`initialize`方法设置密钥长度(通常为2048位或更长...

Global site tag (gtag.js) - Google Analytics