不知道大家对于php加密解密有多少了解,本文主要和大家分享php加密解密相关知识,希望能帮助到大家。
一 对称加密
1.mycyrpt的对称加密:
|
注: 此方法php7.1开始已经被废弃,开始采用openssl_encrypt和openssl_decrypt , 官方推荐使用openssl一族进行加解密
2.OpenSSL 扩展中的对称加密
|
注: 1. 为什么要生成iv,iv的作用是什么
【
回顾一下 openssl_get_cipher_methods() 返回的加密算法列表,有很多名字中间带有 “CBC” 字样,这些加密算法使用了同一种加密模式,也就是 密码分组链接模式(Cipher Block Chaining)。
在 CBC 模式的加密算法中,明文会被分成若干个组,以组为单位加密。每个组的加密过程,依赖他前一个组的数据:需要跟前一组的数据进行异或操作后生成本组的密文。那么最开头的那个组又要依赖谁呢?依赖的就是 IV,所以这就是为什么 IV 要叫初始化向量。IV 是 初始化向量(initialization vector)的缩写
IV 应该是随机生成的,所以代码用到了 openssl_random_pseudo_bytes() 生成 IV。该函数接收一个 int,代表需要生成的 IV 的长度。
IV 长度随加密算法不同而不同。一般人是记不住那么多算法需要的 IV 长度的。所以直接使用 openssl_cipher_iv_length() 函数,这个函数返回一个 int,表示加密算法需要的 IV 长度:
|
比如 AES-256-CBC 需要16位的 IV、 BC-CBC 需要 8 位的 IV、而AES-128-ECB 不需要 IV,所以返回了 0。
】
2. 在使用过程中需要注意的问题
在进行加解密时,两个函数除了第一个参数不同,其余参数都要保证相同才能顺利解密。最后,在使用需要 IV 的加密算法时,需要注意:
必须传 $iv 参数,不传的话PHP将会抛出一个 Warning
IV 应该是随机生成的(比如用 openssl_random_pseudo_bytes() ),不能人为设定
每次加密都应该重新生成一次 IV ,不可偷懒多次加密采用相同 IV
IV 要随着密文一起保存(不然就没法解密啦),可以直接附在密文串后面,也可以分开保存
如果看不懂,可以参考对称加密
二 非对称加密
常用的非对称加密有RSA算法,非对称加密和解密使用的是不同的密钥,其中一个对外公开作为公钥,另一个只有私有者拥有,作为私钥。
用私钥加密的信息只有公钥才能解开,或者反之用公钥加密的信息只有私钥才能解开。
在RSA加解密之前,需要先生成一对公私钥,可使用Linux自带的RSA密钥生成工具openssl获取一对公私钥,也可以使用PHP openssl扩展函数生成一对公私钥。
可参考:RSA非对称加密
注:非对称加密的缺点是机密和解密花费时间长,速度慢,只适合对少量数据进行加密。
如果既想有很快的加密速度,又想保证数据比对称加密更安全,可以使用混合加密。(即 对数据进行对称加密,对密钥做非对称加密)
解密的时候,先用非对称加密得到密钥,再用密钥解开密文得到明文。
相关推荐: