Login
网站首页 > 文章中心 > 其它

php解决aes_php解决乱码的方法

作者:小编 更新时间:2023-10-12 15:28:32 浏览量:233人看过

PHP对称加密-AES

对称加解密算法中,当前最为安全的是 AES 加密算法(以前应该是是 DES 加密算法),PHP 提供了两个可以用于 AES 加密算法的函数簇: Mcrypt 和 OpenSSL .

在一些场景下,我们不能保证两套通信系统都使用了相函数簇去实现加密算法,可能 siteA 使用了最新的 OpenSSL 来实现了 AES 加密,但作为第三方服务的 siteB 可能仍在使用 Mcrypt 算法,这就要求我们必须清楚 Mcrypt 同 OpenSSL 之间的差异,以便保证数据加解密的一致性.

协同好以上两点,就可以让 Mcrypt 和 OpenSSL 之间一致性的对数据进行加解密.

AES 是当前最为常用的安全对称加密算法,关于对称加密这里就不在阐述了.

AES 有三种算法,主要是对数据块的大小存在区别:

Mcrypt 的默认填充算法.NUL 即为 Ascii 表的编号为 0 的元素,即空元素,转移字符是 "\0",PHP 的 pack 打包函数在 'a' 模式下就是以 NUL 字符对内容进行填充的,当然,使用 "\0" 手动拼接也是可以的.

默认使用 NUL("\0") 自动对待加密数据进行填充以对齐加密算法数据块长度.

获取 mcrypt 支持的算法,这里我们只关注 AES 算法.

options 参数即为重要,它是兼容 mcrpty 算法的关键:

故可以得出 mcrpty簇 与 openssl簇 的兼容条件如下:

建议将源码复制到本地运行,根据运行结果更好理解.

①二者使用的何种填充算法.

PHP 加密:AES & RSA

最近两年一直从事与金融相关项目的开发与维护.但是,关于 PHP 加密解密的最佳实践,网上没有人给出一个完美的总结.恰逢最近看了<<图解密码技术>>一书,对 PHP 加解密有了更深刻的认识.

为了避免各位看枯燥的文字理论,开篇我就把总结给出:

第一段:对称加密

对称加密的特点是加解密速度快,加密后的密文强度目前还没有硬解的可能性.但是,在未来随着计算机性能的提升有可能会出现被破解的可能性.

对称加密的缺点也很明显.对称加密的加密过程与解密过程使用的是同一把密钥.一旦泄漏密钥,加密就失去了任何意义.

根据<<图解密码技术>>一书的推荐,对称加密目前推荐使用 AES.在 PHP 当中要实现 AES 加解密,是使用 openssl 扩展来实现.所以,请确保你的 PHP 已经开启了 openssl 扩展.

可以通过如下方式检测:

或者如下方式检测:

AES 的加密模式属于分组密码模式.所谓分组密码,是加密时把明文按照固定的长度分组,然后再进行加密.当然,细节之处很很多不同.AES 分组模式有多种:ECB、CBC、CFB、OFB、CTR 五种分组模式.目前优先推荐使用 CBC 模式.

如果使用 CBC 模式,那么在加密的时候,就需要一个前置的加密向量 IV.当初博主在使用 AES 来加密的时候,就很奇怪一个对称加密为何要这个向量.因为,在博主寒冰的潜意识里,对称加密只需要一个密钥就 Ok 了.没想到 AES 加密还有多种模式,而这个 CBC 模式恰恰就需要一个这样的向量值.关于这个向量大家可以在网上查阅相关的资料.这个东西非常重要,也非常好理解.

关于 PHP AES 加解密会用到的相关方法:

第二段:非对称加密

非对称加密是指公钥加密私钥解密,私钥加密公钥解密的算法.非对称加密的算法有很多.<<图解密码技术>>一书推荐使用 RSA 算法.它使用起来也非常简单.

要使用 RSA 算法.首先,我们必须生成一对公钥私钥.其实生成公钥私钥很简单.

在 Linux 系统,直接使用如下命令生成:

此命令会生 ~/.ssh/ 目录下生成两个文件:

id_rsa 是私钥, is_rsa.pub 是公钥.

关于 PHP RSA 加解密会用到的相关方法:

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章