词条信息

admin
admin
超级管理员
词条创建者 发短消息   

相关词条

热门词条

更多>>
什么是端口?到底是做什么的呢?
端口一般指两种,一种是硬件比如路由器或者交换机的插网线的端口,一种是软件的逻辑的概念,比如http的80端口!...
7种进阶方法让你快速测试端口连通性
Ping是Windows、Linux和Unix系统下的一个检查网络连通性的命令工具,对于大部分互联网用户来说很...
电脑开机,总需要按F1,是什么原因造成的?
一.主板掉电这个说法是行业内的叫法了,一般是主板的CMOS电池没电了导致的。也是最常见的一种提示你按F1的提示...
社保降费对个人有什么影响?
下调城镇职工基本养老保险单位缴费比例是政府给企业发的一个大红包,特别是对于企业来说是一个利好,但是对个人来说有...
车辆“出险”对下年保费的影响,到底有多大?
【出险对交强险的影响】【出险对商业险的影响】车辆“出险”对下年保费的影响,到底有多大?这里有必要先提下车险第三...

精选图集

更多>>
简易百科旧版 >>所属分类 >> 源码天下    PHP   

PHP如何加密解密?

标签: PHP 加密 解密

顶[0] 发表评论(0) 编辑词条

本篇文章给大家带来的内容是介绍PHP如何加密解密?PHP加密解密的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

为了保证网络传输数据的安全性,涉及敏感数据的传输,最好对数据预先加密,然后再在网络上进行传输,同时,还要保证数据在另一端是可解密的,并且还必须要通过钥匙(公钥或私钥)才能解密,没有钥匙(公钥或私钥)的人即使是拿到了加密过的数据也无法解密。


本篇文章主要给大家介绍对称加密中的AES加密算法;非对称加密中的RSA加密算法。


目录

一、对称加密编辑本段回目录


采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。


AES加密算法


密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。


PHP的OpenSSL扩展已经实现了AES加密算法,我们可以通过OpenSSL扩展提供的方法实现对数据的加密和解密,PHP在7.2版本已经完全移除了MCrypt加密,PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt.


PHP AES实现(加密、解密)


PHP实现代码:


class AES

{

    //设置AES秘钥

    private static $aes_key = 'bUYJ3nTV6VBasdJF'; //此处填写前后端共同约定的秘钥

    /**

     * 加密

     * @param string $str    要加密的数据

     * @return bool|string   加密后的数据

     */

    static public function encrypt($str) {

        $data = openssl_encrypt($str, 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);

        $data = base64_encode($data);

        return $data;

    }


    /**

     * 解密

     * @param string $str    要解密的数据

     * @return string        解密后的数据

     */

    static public function decrypt($str) {

        $decrypted = openssl_decrypt(base64_decode($str), 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);

        return $decrypted;

    }

}



二、非对称加密编辑本段回目录


对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。


RSA加密算法


RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。


解密者拥有私钥,并且将由私钥计算生成的公钥发布给加密者。加密都使用公钥进行加密,并将密文发送到解密者,解密者用私钥解密将密文解码为明文。


以甲要把信息发给乙为例,首先确定角色:甲为加密者,乙为解密者。首先由乙随机确定一个KEY,称之为密匙,将这个KEY始终保存在机器B中而不发出来;然后,由这个 KEY计算出另一个KEY,称之为公匙。这个公钥的特性是几乎不可能通过它自身计算出生成它的私钥。接下来通过网络把这个公钥传给甲,甲收到公钥后,利用公钥对信息加密,并把密文通过网络发送到乙,最后乙利用已知的私钥,就对密文进行解码了。以上就是RSA算法的工作流程。


算法实现过程为:


随意选择两个大的质数p和q,p不等于q,计算N=pq。


根据欧拉函数,不大于N且与N互质的整数個数為(p-1)(q-1)。


选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)。


用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))。


将p和q的记录销毁。


以上内容中,(N,e)是公钥,(N,d)是私钥。


生成私钥和公钥


生成私钥文件:


openssl genrsa -out rsa_private_key.pem 1024


利用私钥,生成公钥:


openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

通过生成的公钥和私钥就可以对数据进行加解密:


PHP RSA 实现(加密、解密)


PHP实现代码(公钥加密私钥解密):


class RSA

{

    /**

     * @param string $str 要加密的数据

     * @param string $public_key 公钥

     * @return string

     */

    static public function encrypt($str, $public_key) {

 

        $encrypted = '';

        $pu_key = openssl_pkey_get_public($public_key);

        openssl_public_encrypt($str, $encrypted, $pu_key);//公钥加密

 

        $encrypted = base64_encode($encrypted);

 

        return $encrypted;

    }

 

    /**

     * 解密

     * @param string $str 要解密的数据

     * @param string $private_key 私钥

     * @return string

     */

    static public function decrypt($str, $private_key) {

 

        $decrypted = '';

        $pi_key =  openssl_pkey_get_private($private_key);

        openssl_private_decrypt(base64_decode($str), $decrypted, $pi_key);//私钥解密

 

        return $decrypted;

    }

}


PHP实现代码(私钥加密公钥解密):


class RSA

{

    //私钥加密 

    static public function encrypt($str, private_key) {

        $encrypted = '';

        $pi_key = openssl_pkey_get_private($private_key);

        openssl_private_encrypt($data, $encrypted, $pi_key); //私钥加密

        $encrypted = base64_encode($encrypted);

        return $encrypted;

    }

    //公钥解密

    static public function decrypt($str, $public_key) {

        $decrypted = '';

        $pu_key = openssl_pkey_get_public($public_key);

        openssl_public_decrypt(base64_decode($str), $decrypted, $pu_key);//公钥解密

        return $decrypted;

    }

}


总结:以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。

 

 

附件列表


按字母顺序浏览:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

→我们致力于为广大网民解决所遇到的各种电脑技术问题
 如果您认为本词条还有待完善,请 编辑词条

上一篇php如何把阿拉伯数字转为大写中文的数字?
下一篇PHP 用for循环求1到100的和

0
1. 本站部分内容来自互联网,如有任何版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
2. 本站内容仅供参考,如果您需要解决具体问题,建议您咨询相关领域专业人士。
3. 如果您没有找到需要的百科词条,您可以到百科问答提问或创建词条,等待高手解答。

关于本词条的提问

查看全部/我要提问>>