brainfoolong / cryptojs-aes-php
使用JavaScript在客户端和PHP在服务器端进行CryptoJS AES加密/解密
Requires
- php: >=7.0.0
- ext-json: *
- ext-openssl: *
This package is auto-updated.
Last update: 2024-09-15 19:50:10 UTC
README
重要
此库被认为是过时的,仅读并已被我更新的库 https://github.com/brainfoolong/js-aes-php 取代 - 它基本上是相同的,无需第三方库 CryptoJS
。
一个用于在javascript和/或PHP中AES加密/解密数据的工具。您可以使用它仅用于PHP,仅用于JavaScript或混合使用。
它使用默认的 aes-256-cbc
实现,具有随机盐和随机初始化向量。此库不支持其他加密或模式。
特性
- 在JavaScript中加密任何值(对象/数组等...) - 可以传递给
JSON.stringify
的任何内容 - 在PHP中加密任何值(对象/数组等...) - 可以传递给
json_encode
的任何内容 - 在PHP/JavaScript中解密,无论您在哪里加密了值
如何使用
PHP | 查看 dist/example-php.php
您需要文件 src/CryptoJsAes.php
<?php use Nullix\CryptoJsAes\CryptoJsAes; require "CryptoJsAes.php"; // encrypt $originalValue = ["We do encrypt an array", "123", ['nested']]; // this could be any value $password = "123456"; $encrypted = CryptoJsAes::encrypt($originalValue, $password); // something like: {"ct":"g9uYq0DJypTfiyQAspfUCkf+\/tpoW4DrZrpw0Tngrv10r+\/yeJMeseBwDtJ5gTnx","iv":"c8fdc314b9d9acad7bea9a865671ea51","s":"7e61a4cd341279af"} // decrypt $encrypted = '{"ct":"g9uYq0DJypTfiyQAspfUCkf+\/tpoW4DrZrpw0Tngrv10r+\/yeJMeseBwDtJ5gTnx","iv":"c8fdc314b9d9acad7bea9a865671ea51","s":"7e61a4cd341279af"}'; $password = "123456"; $decrypted = CryptoJsAes::decrypt($encrypted, $password); echo "Encrypted: " . $encrypted . "\n"; echo "Decrypted: " . print_r($decrypted, true) . "\n";
Javascript | 查看 dist/example-js.html
您需要文件 dist/cryptojs-aes.min.js
和 dist/cryptojs-aes-format.js
<script src="dist/cryptojs-aes.min.js"></script> <script src="dist/cryptojs-aes-format.js"></script> <script> (function () { // encrypt value let valueToEncrypt = 'foobar' // this could also be object/array/whatever let password = '123456' let encrypted = CryptoJSAesJson.encrypt(valueToEncrypt, password) console.log('Encrypted:', encrypted) // something like: {"ct":"10MOxNzbZ7vqR3YEoOhKMg==","iv":"9700d78e12910b5cccd07304333102b7","s":"c6b0b7a3dc072248"} })() </script> <script> (function () { // decrypt value let encrypted = '{"ct":"hQDvpbAKTGp1mXgzSShR9g==","iv":"57fd85773d898d1f9f868c53b436e28f","s":"a2dac436512077c5"}' let password = '123456' let decrypted = CryptoJSAesJson.decrypt(encrypted, password) console.log('Decrypted:', decrypted) })() </script>
Composer安装
composer require brainfoolong/cryptojs-aes-php
支持的PHP版本
- 8.x
- 7.x
- 5.x(前往 遗留分支)
安全注意事项
自从这个库创建以来,加密技术已经发展。此库和AES-256-CBC加密仍然良好和安全,但可能已经存在比这个库或CryptoJS本身更好的替代方案。如果您需要真正的安全性,您应该投入更多时间来寻找适合您的方案。
此外,还有一篇关于此库的PHP问题/信息的好文章:https://stackoverflow.com/questions/16600708/how-do-you-encrypt-and-decrypt-a-php-string/30159120#30159120
替代方案 - ASCON
您可能想知道是否有替代AES加密的方案可以在PHP/JS中使用。ASCON是一个较新的轻量级加密方案,已被2023年NIST选为新的轻量级加密标准,可能适合您的需求。我已为PHP和JS创建了库,您可以在以下位置找到它们:https://github.com/brainfoolong/php-ascon 和 https://github.com/brainfoolong/js-ascon
需求
- PHP支持OpenSSL: https://php.ac.cn/manual/en/openssl.installation.php
- 以下php.ini选项启用时无法工作:https://php.ac.cn/manual/en/mbstring.overload.php
变更日志
-
2.3.0 - 2023年12月
- 将CryptoJS升级到v4.2.0
-
2.2.0 - 2023年6月13日
- 通过使用正确的OPENSSL标志修正了隐式true到1的转换(感谢@benjumanji)
- 添加了php和js的测试
- 为包含非ASCII字符的密码短语添加了js控制台警告,因为它从未支持过
- 略微改进了php解密,以避免一个无用的哈希循环
-
2.1.1 - 2021年1月15日
- 仅进行了少量文档和composer的修复
-
2.1.0 - 2020年12月30日
- 添加了快速解密和解密函数:
CryptoJSAesJson.encrypt()
和CryptoJSAesJson.decrypt()
- 请参阅示例以获取更多信息
- 添加了快速解密和解密函数:
-
2.x.x - 2020年4月7日
- 将项目升级到命名空间