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用在服务器端,公钥发放给Android跟iOS等前端
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加密解密技术以及OpenSSL的使用对于保障应用程序的数据安全具有重要意义。通过实践这些实例,开发者可以更好地理解和运用这些工具,提升其在网络安全领域的专业能力。
**C# RSA加密解密详解** 在信息安全领域,加密技术是一种至关重要的手段,用于保护数据的隐私和安全性。RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,广泛应用于网络通信、数据存储等领域。C#作为.NET...
在给定的"兼容JS和C#的RSA加密解密实例"中,我们关注的是如何在JavaScript(前端)和C#(后端)之间使用RSA进行安全的数据交换。这涉及到两个主要的方面:前端的加密和后端的解密。 前端部分,JavaScript通常用于...
RSA加密解密C#实现调用实例 public string RSAEncrypt(string xmlPublicKey, string m_strEncryptString) { try { byte[] PlainTextBArray; byte[] CypherTextBArray; string Result; System.Security....
在本文中,我们将深入探讨RSA加密解密机制及其重要性。 RSA的名字来源于其三位发明者:Ron Rivest、Adi Shamir 和 Leonard Adleman。它基于大数因子分解的困难性,即给定一个大合数,找到它的两个素数因子是极其...
本文主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了Java RSA加密解密算法的相关实现技巧。 知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard ...
在易语言中调用JSEncrypt库来实现RSA加密解密,可以为易语言的应用增加一层安全防护。 JSEncrypt是一个JavaScript库,由Benjamin van Ryseghem开发,主要用于RSA加密操作,特别适用于前端与后端之间的安全通信。它...
本文将深入探讨RSA加密和解密的基础知识以及如何在Unity中实现这一功能。 首先,RSA加密的核心原理是基于大整数因子分解的困难性。它生成一对密钥:公钥和私钥。公钥可以公开,用于加密;而私钥必须保密,用于解密...
RSA加密解密示例工程是一个专门针对Android平台设计的学习资源,旨在帮助开发者深入理解并实践RSA加密算法。RSA,全称Rivest-Shamir-Adleman,是一种非对称加密技术,广泛应用于网络安全、数据保护等领域。该示例...
在Java中实现RSA加密解密,可以帮助开发者保护敏感信息,例如在网络传输过程中防止数据被窃取。 首先,了解RSA的工作原理至关重要。它基于两个大素数的乘积,生成一对密钥:公钥和私钥。公钥可以公开,用于加密信息...
本实例是基于Delphi编程环境实现的一个无第三方控件依赖的RSA加密程序,它提供了生成随机数、创建密钥对以及进行加密解密操作的功能。 首先,RSA算法的核心在于大素数的选择和欧拉函数。在Delphi中,我们可以通过...
在这个实例中,我们看到有C++编写的RSA加密解密代码,它在两个不同的开发环境中运行:Windows Mobile平台下的Visual Studio 2005以及使用较旧的Visual C++ 6.0。这些源码提供了实现大数加密解密的示例,大数是指超出...
本例中的Project1.exe可能是一个Delphi编译的示例应用程序,展示了如何在Delphi环境中使用RSA加密和解密。这个程序应该演示了如何生成RSA密钥对,使用公钥加密数据,然后使用私钥解密,反之亦然。在实际应用中,公钥...
在Eclipse中,你可以创建一个新Java类,将以上代码复制进去,然后运行来测试RSA加密解密的功能。同时,确保Maven项目已经正确配置并导入了所有必要的依赖。如果遇到任何问题,可以检查`pom.xml`文件,确保包含如下的...
- RSA加密过程是不可逆的,因此在使用前需确认加密和解密的对象匹配。 在给出的链接中(https://blog.csdn.net/qq_37835111/article/details/87358779),作者提供了一个具体的示例,演示了如何在C# .NET环境下...
### Python3 加密解密库Crypto的RSA加解密与签名/验签实现方法实例 #### 一、引言 本篇文章重点介绍如何利用...通过本文提供的实例,读者可以更深入地了解并掌握Python3中`Crypto`库的RSA加密解密和签名/验签功能。
在这个“RSA加解密(C语言实现).zip”文件中,我们可以期待找到一个用C语言编写的RSA加密和解密的实现。 首先,RSA的核心原理是基于大数因子分解的困难性。它使用两个大素数p和q生成一对密钥:公钥和私钥。公钥...
在C#中,我们可以使用`System.Security.Cryptography.RSACryptoServiceProvider`类来处理RSA加密解密。首先,我们需要创建一个RSA实例,然后生成或加载公钥和私钥。公钥可以公开分享,而私钥必须保密。 ```csharp ...
本文将深入探讨Android平台上的RSA加密解密技术,并基于提供的"Android RSA 加密解密Demo"进行详细讲解。 首先,RSA加密算法基于大数因子分解的难题,由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出。它...
在Java中,我们可以通过以下步骤实现RSA加密解密: 1. **生成密钥对**: - 使用`KeyPairGenerator`类的`getInstance("RSA")`方法获取RSA密钥对生成器。 - 调用`initialize`方法设置密钥长度(通常为2048位或更长...