brainfoolong/cryptojs-aes-php

此包已弃用且不再维护。未建议替代包。

使用JavaScript在客户端和PHP在服务器端进行CryptoJS AES加密/解密

2.3.0 2023-11-30 05:35 UTC

This package is auto-updated.

Last update: 2024-09-15 19:50:10 UTC


README

Tests

重要

此库被认为是过时的,仅读并已被我更新的库 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.jsdist/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版本

安全注意事项

自从这个库创建以来,加密技术已经发展。此库和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-asconhttps://github.com/brainfoolong/js-ascon

需求

变更日志

  • 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日

    • 将项目升级到命名空间