paragonie/constant_time_encoding

RFC 4648 编码(Base-64、Base-32、Base-16)的恒定时间实现

v3.0.0 2024-05-08 12:36 UTC

README

Build Status Static Analysis Latest Stable Version Latest Unstable Version License Downloads

本库基于 Steve "Sc00bz" Thomas 制作的 恒定时间 base64 实现,旨在提供不通过处理器缓存缺失泄露编码/解码信息的字符编码函数。关于 缓存时间攻击 的更多信息。

我们的分支提供了以下增强功能

  • 抵抗 mbstring.func_overload
  • 单元测试
  • Composer 和 Packagist 就绪
  • Base16 编码
  • Base32 编码
  • 使用 pack()unpack() 代替 chr()ord()

PHP 版本要求

本库的第 3 版应能在 PHP 8 或更高版本上运行。

本库的第 2 版应能在 PHP 7 或更高版本上运行。请参阅 v2.x 分支

对于 PHP 5 支持,请参阅 v1.x 分支

如果您打算将此库作为依赖项添加到旨在在 PHP 5 至 8.4 上运行的项目中,请将所需版本设置为 ^1|^2|^3

如何安装

composer require paragonie/constant_time_encoding

如何使用

use ParagonIE\ConstantTime\Encoding;

// possibly (if applicable): 
// require 'vendor/autoload.php';

$data = random_bytes(32);
echo Encoding::base64Encode($data), "\n";
echo Encoding::base32EncodeUpper($data), "\n";
echo Encoding::base32Encode($data), "\n";
echo Encoding::hexEncode($data), "\n";
echo Encoding::hexEncodeUpper($data), "\n";

示例输出

1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
2VMKKPSHSWVCVZJ6E7SONRY3ZXCNG3GE6ZZFU7TGJSX7KUKFNLAQ====
2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====
d558a53e4795aa2ae53e27e4e6c71bcdc4d36cc4f6725a7e664caff551456ac1
D558A53E4795AA2AE53E27E4E6C71BDCC4D36CC4F6725A7E664CAFF551456AC1

如果您只需要特定变体,可以直接引用所需的类,如下所示

use ParagonIE\ConstantTime\Base64;
use ParagonIE\ConstantTime\Base32;

$data = random_bytes(32);
echo Base64::encode($data), "\n";
echo Base32::encode($data), "\n";

示例输出

1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====

支持合同

如果您的公司在他们的产品或服务中使用此库,您可能对 从 Paragon Initiative Enterprises 购买支持合同 感兴趣。