外链论坛

 找回密码
 立即注册
搜索
查看: 78|回复: 0

基于RSA算法的PHP网站用户登录数据加密

[复制链接]

2675

主题

4564

回帖

9914万

积分

论坛元老

Rank: 8Rank: 8

积分
99140445
发表于 2024-7-10 18:17:15 | 显示全部楼层 |阅读模式

1.简介RSA

RSA算法是一种极具影响力的非对叫作加密算法,已被ISO举荐为公钥数据加密标准,是迄今被科研最广泛的公钥算法,被广泛认为是最优秀的公钥方法之一。从诞生迄今经历了各样攻击考验,迄今显现任何靠谱的破解该算法的方式,只要钥匙的长度足够长,用RSA加密的信息实质上是很难被破解的,加之该算法易于理解和操作,被业界人士广泛运用[1]。

RSA算法需产生两个密钥:公钥(publickey)和私钥(privatekey)。公钥与私钥不一致且必要成对显现,其中一个密钥用来加密,对应的另一个密钥用来解密,通常习惯运用公钥加密私钥解密。

公钥和私钥常用openssl命令行生成,这种操作比较繁杂这里举荐能够供给在线生成RSA密钥对的工具,该工具能够供给pkcs#1格式及pkcs#8格式的密钥对。生成密钥位数能够是512位(bit)、1024位(bit)、2048位(bit)、4096位(bit)四种, 其网址为http://web.chacuo.net/netrsakeypair,通常在程序设计中,生成密钥位数可选取“1024位(bit)”,密钥格式可选取“pkcs#8格式”。

2.PHP对POST或GET传输数据进行加密

2.1开启PHP的openssl模块

openssl模块运用关联函数来生成证书及加密解密数据。首要查看该模块是不是已然开启,查看的办法是在php程序中执行“phpinfo();”语句,或在phpstudy等工具中单击“查看phpinfo”,查询“openssl”,倘若有则需再做操作,倘若必须启用该模块。启用办法是打开php.ini配置文件,在文中查询“openssl”,删除“extension=php-openssl.dll”之前的分号,保留配置文件就可

生成公钥和私钥对

到链接位置http://web.chacuo.net/netrsakeypair打开网站,单击“生成密钥对(RSA)”按钮,就会生成一对独一的密钥,每单击一次该按钮,就会生成区别的密钥对。

复制生成的公钥及私钥,在程序中分别保留为两个常量,框架代码如下:

<?php define("RSA_public","-----BEGIN PUBLIC KEY----- 。。。 -----END PUBLIC KEY----- "); define("RSA_private","-----BEGIN PRIVATE KEY----- 。。。 -----END PRIVATE KEY-----"); ?>

因为生产的密钥比较长,为增多程序可读性,将此段代码保留成一个文件,如“config.php”,方便后续在主程序中运用require命令包括此代码段

2.2编写加密解密函数

编写加密解密函数方便后续程序调用,此处函数名命名为RSA-Openssl,该函数应有两个参数,一个是加密或解密的串,一个是决定加密还是解密操作。此处当$type=′encode′为加密操作,当$type==′decode′时为解密操作。

若进行加密操作,则首要检测生成的公钥,并运用公钥加密数据。运用openssl_pkey_get_public()函数检测生成的公钥是不是可用。倘若不可用,检测是不是密钥复制操作有误;倘若可用,再运用openssl_public_encrypt()函数对必须加密的数据进行加密,代码如下:

if ($type==encode) { $return=openssl_pkey_get_public(RSA_public);//检测公钥是不是可用 if(!$return){ die("公钥不可用"); } openssl_public_encrypt($data,$crypted,$return);//运用公钥加密数据 $crypted=base64_encode($crypted); return $crypted; }

代码中为防止运行结果显现乱码,因此运用了base6

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-10-3 22:20 , Processed in 0.070842 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.