Diogo Cordeiro a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 5 年之前
..
src a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 5 年之前
tests a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 5 年之前
.gitignore a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 5 年之前
.travis.yml a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 5 年之前
LICENSE.txt a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 5 年之前
README.md a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 5 年之前
composer.json a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 5 年之前
phpunit.xml.dist a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 5 年之前
psalm.xml a1edc2c6a9 [CORE][COMPOSER] Move plugins extlibs to composer (where appropriate) 5 年之前

README.md

Constant-Time Encoding

Build Status

Based on the constant-time base64 implementation made by Steve "Sc00bz" Thomas, this library aims to offer character encoding functions that do not leak information about what you are encoding/decoding via processor cache misses. Further reading on cache-timing attacks.

Our fork offers the following enchancements:

  • mbstring.func_overload resistance
  • Unit tests
  • Composer- and Packagist-ready
  • Base16 encoding
  • Base32 encoding
  • Uses pack() and unpack() instead of chr() and ord()

PHP Version Requirements

This library should work on any supported version of PHP. It may work on earlier versions, but we do not guarantee it. If it doesn't, we will not fix it to work on earlier versions of PHP.

How to Install

composer require paragonie/constant_time_encoding

How to Use

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";

Example output:

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

If you only need a particular variant, you can just reference the required class like so:

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

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

Example output:

1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====