PHP与客户端交互使用OpenSSL RSA加解密数据

众所周知,任何数据在互联网上传输,是极其不安全的,所以一些私密数据就需要通过加密后再传输
应用场景:PHP与客户端交互
一:下载OpenSSL
wget  http://www.openssl.org/source/openssl-1.1.0e.tar.gz


二:解压OpenSSL到当前目录,得到openssl-openssl-1.1.0e文件夹
tar -xzf openssl-1.1.0e.tar.gz


三:进入解压的目录
cd openssl-1.1.0e


四:设定Openssl 安装( --prefix )参数为要安装的目录,也就是安装后的档案会出现在该目录下
./config --prefix=/usr/local/openssl


五:执行命令./config -t


六:执行make,编译Openssl
make install


七:进入Openssl目录
cd usr/local/openssl/bin/

1.png

文件已经存在,安装完成



生成原始 RSA私钥文件:openssl genrsa -out rsa_private_key.pem 1024
加密长度是1024位。加密长度是指理论上最大允许“被加密的信息”长度的限制,也就是明文的长度限制。随着这个参数的增大(比方说2048),允许的明文长度也会增加,但同时也会造成计算复杂度的极速增长。

将原始 RSA私钥转换为 pkcs8格式:openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem


根据私钥生成RSA公钥:openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

进入目录查看生成的公钥、私钥文件,cd usr/local/bin/

从结果中可以看出,文件已经生成成功!

QQ截图20170816102503.png

==========华丽的分割线==========
九:PHP使用RSA私钥加密、公钥解密
1)将上面生成的公钥文件和私钥文件复制到PHP项目中
cp -r ./rsa_public_key.pem /www/wwwroot/rsa/
cp -r ./rsa_private_key.pem /www/wwwroot/rsa/


2)下图可以看出,已经成功的把公钥、私钥文件复制进来

5.png


3)执行php代码
/**
 * rsa加解密
 */
public function rsa(){
	
	$private_key = file_get_contents("http://".$_SERVER['SERVER_NAME']."/rsa/rsa_private_key.pem");		//私钥
	$public_key = file_get_contents("http://".$_SERVER['SERVER_NAME']."/rsa/rsa_public_key.pem");		//公钥
	
	$pi_key =  openssl_pkey_get_private($private_key);						//可用返回资源id
	$pu_key = openssl_pkey_get_public($public_key);
	
//	加密数据
	$data = [
	    'id' => '1234567890',
	    'name' => '小明',
	    'mobile' => '123456',
	];
	$data = json_encode($data,JSON_UNESCAPED_UNICODE);						//转json格式


	$encrypted = '';		//加密后的结果
	$decrypted = '';		//解密后的结果

	openssl_public_encrypt($data, $encrypted, $pu_key);						//公钥加密
//	参数:1.数据源,2.加密后的结果,3.资源id
	$encrypted = base64_encode($encrypted);									//转base64传输
	

	openssl_private_decrypt(base64_decode($encrypted), $decrypted, $pi_key);//私钥解密
//	参数:1.数据源(先解base64),2.解密后的结果,3.资源id
	
//	打印结果
	p('数据源:'.$data);
	p('加密后的数据:'.$encrypted);
	p('解密后的数据:'.$decrypted);
}

6.png

7.png


使用OpenSSL生成RSA文件,PHP使用RSA加解密至此完成~~


客官,点击下方打赏一个呗~


点赞

发表评论