byjg/crypto

A generic repository for implement cryptographic algorithms with a customizable strong key generator.

4.9.0 2024-01-05 20:56 UTC

This package is auto-updated.

Last update: 2024-03-05 21:27:42 UTC


README

Build Status Opensource ByJG GitHub source GitHub license GitHub release

A "passwordless" cryptography library for symmetric encryption.

How it works?

The algorithm is well-know, but the major problem is HOW to store the symmetric key. Instead of store the key, this library use a key seed, and it is able to generate the key dynamically for each encrypting based on a key seed. The key seed is a list of 32 lines of 32 bytes each.

Usage

<?php
$keySet = new \ByJG\Crypto\KeySet(
    [
        // 32 entries of 32 bytes each
    ]
);

$object = new OpenSSLCrypto(
    $algorithm,
    $keySet
);

$text = 'My text needs to be cryptographed';
$encrypted = $object->encrypt($text);
echo $object->decrypt($encrypted);
  • The algorithm needs to be one of the algorithms returned by openssl_get_cipher_methods().
  • The second parameter is the key seed. It is a list of 2-255 entries of 32 bytes each. You can generate it using the command BaseCrypto::getKeySet()

Example

Below a full example:

<?php
require "vendor/autoload.php";

$keySet = new \ByJG\Crypto\KeySet(
    [
       '14dca647bcc087f67b1528cea11094838f5bd2276a08dcabc491c1823afc51dd',
       '9cc0fd22a3dc2fb3d444e0721e5d02f5c39f9d6b7c41c010a28e06e861f54c8b',
       'e7b965f8b401c06d5180f50f49eb9797ad24fef62b20bcde03456d4ea4006e83',
       'd06b7ff23bd76b19bc1283f28a00bb91cccdf6bd163354f099710898e31ac487',
       'b4bed7d50032556780b303f8cfea612b637ab8935443af4219dd9eb06d4d7b01',
       '0b2f4cb0107ab6946938f2c836cdca74f7e2b1c7482dd2942720ccc755b20097',
       'dcd24b8aa48d2bcd2d0b19764088e7d4343cfee6a15c9f805b58e45b6224c2f5',
       '628b889c7471e149724973ee96a1c5728c61f11c45e3ae6314a321c7b3488bde',
       '4e10b6af85f83951f23514d3c9d1248d1a1777ff114a6768ae116c2a72bc4bc3',
       'da13fce62e22f5919efe8f0cb498f067797e5fc68a94c45c9ae9d1717f82555d',
       '5bd0600dbca418c8166ffc0617e24f472f147424c58dfd4859cde2cd6a98dee7',
       '533c32c8e010920471e2462ba88f9c63278f9cdd7f12adde4a6e15595a56783d',
       '13beb307499b0d911c6ea4c12b9e1131c51693b8918ac5a76c09e86477b28b5a',
       'e966e4d659c99a58da41c305de0e479b4885f83ddb30476955ad28fd9b9e2d7a',
       'b7a6b7535547dd27963e2bb34630edcf81364ae998fdd68356772b300b65dbbc',
       'f00a1fd6ac5e8bb774c66ef908052f95c9d654df117958fc13a1b5056ddb331b',
       '297e13efdd279687af8c70158b446a4724c4a17989eb0fc93ee87606e958fc9c',
       '27a7e110e61076e4901822c940c294f29abbc659370480cd234473c0c90e10ef',
       'd28e4c29007269902711ae177e4c882a4893f1fa47a987872879b0a785cf8c20',
       'f3be6dc7b34df6aafdc3bd5705fd37d73291ac5a15fe7fd4d39497b43e87dd28',
       '8782a68a904d269ae01bb1705dd1b59047749dd07b5b486e5b79b04660054c1e',
       '21c05ba1cf9028f35ab3fd02e46dab733f8957e6b003e5ba8ea9917fa1ad2809',
       '722a9fe048b6aef9407c5ef7cb76896422ef0add38e5db4afd649a7c7ea1f905',
       '6b233fb3e56e55236ab6c862cb982c4df5dde4ca44361b02cd5915160966d3c5',
       'bd6802bc1252316c44e277bbdfdac8712223a445899d77f9d996286f2c499668',
       'e58088cdef444792501a21813ff520c3fd05cf249b958e0b92fd50142eff74d5',
       '9ca20ff424531314ccfd0e067ced0fbc078df65c77d9c5d30470058e6e2fc83c',
       'd50f461eab2cb5855d44bb753710193970c646b6017ce2522081d337188ee28d',
       '9473c14be30ae90db3d16014a538ce6b19d2477bbf1294793540c19559ed1363',
       '20ad5fed300d150305ad48eb1f9b72cc5d24645d3e736ad5c66e6aeee6dcea88',
       '522b058ea3c9cb29c010c431b30e6b6449994e03dc6434965c941e8c465881eb',
       'dec0adad3df3e8c9f5eb135902970c59cd75fc7c1b52ba41ce8ec5b1351e74dc',
   ];
);

$object = new \ByJG\Crypto\OpenSSLCrypto(
    'aes-256-cbc',
    $keySet
)

$enc = $object->encrypt('My secret text needs to be encrypted');
echo $object->decrypt($enc) . "\n";

Important

  • Do not share the key seed.
  • You'll only be able to decrypt the text if you have the same key seed used to encrypt it.

Additional Documentation

Installation

composer require "byjg/crypto"

Running the tests

./vendor/bin/phpunit

Dependencies

flowchart TD  
    byjg/crypto --> ext-openssl

Open source ByJG