PHPackages                             bypassflow/crypt - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. bypassflow/crypt

ActiveLibrary[Security](/categories/security)

bypassflow/crypt
================

PHP crypt package.

1.0.0(11mo ago)1159MITPHPPHP &gt;=8.4.0

Since May 25Pushed 11mo ago1 watchersCompare

[ Source](https://github.com/bypassflow/crypto)[ Packagist](https://packagist.org/packages/bypassflow/crypt)[ Docs](http://ickx.jp/)[ RSS](/packages/bypassflow-crypt/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (2)Versions (2)Used By (0)

baypassflow crypt
=================

[](#baypassflow-crypt)

bypassflow cryptはPHP8.4以降で利用できる暗号・ハッシュライブラリです。

一般的なレインボーテーブル攻撃に対して強い抗堪性を持つハッシュ・暗号化処理を提供します。

攻撃者に対して値の解析そのものを無駄打ちさせる事で、情報が価値を失うまでの十分な期間の安全を確保します。

また、一般的なハッシュやOpenSSLを利用した暗号化も提供します。

特にOpenSSLを利用した暗号化を扱う際に保存が必須となる情報を簡単に取得できるので、OpenSSLを利用した暗号化を容易に導入する事ができます。

導入方法
----

[](#導入方法)

`composer require baypassflow/crypt`としてインストールできます。

[Packagist](https://packagist.org/packages/baypassflow/crypt)

主な機能
----

[](#主な機能)

### ランダムハッシュ

[](#ランダムハッシュ)

`HashService::createRandomHash()`を用いて**データ、ソルト、HMACキーが同じであっても常に異なるハッシュ値**を返します。

これにより一般的なレインボーテーブル攻撃を無効化します。

生成されたハッシュは `HashService::verifyRandomHash()` で整合性の確認を行えます。

実行例：

```
use bypassflow\crypt\HashService;

$string_1   = 'string1';
$salt_1     = 'salt1';
$hmac_key_1 = 'hmac_key1';

$string_2   = 'string2';
$salt_2     = 'salt2';
$hmac_key_2 = 'hmac_key2';

$hashService = HashService::factory();

$hash_same_1 = $hashService->createRandomHash(
    $string_1,
    $salt_1,
    $hmac_key_1,
);

$hash_same_2 = $hashService->createRandomHash(
    $string_1,
    $salt_1,
    $hmac_key_1,
);

$hash_salt = $hashService->createRandomHash(
    $string_1,
    $salt_2,
    $hmac_key_1,
);

$hash_hmac_key = $hashService->createRandomHash(
    $string_1,
    $salt_1,
    $hmac_key_2,
);

$hash_string_2 = $hashService->createRandomHash(
    $string_2,
    $salt_1,
    $hmac_key_1,
);

\var_dump(
    [
        $hash_same_1,                   // string(69) "ef48dd9460ff27afe437b6e269c00fa270ed1707a17e310484f3d47b354baa98f17d9"
        $hashService->verifyRandomHash( // bool(true)
            $hash_same_1,
            $string_1,
            $salt_1,
            $hmac_key_1,
        ),
    ],
    [
        // hash_same_1と異なるハッシュが出力されているが、verifyに成功している事に注目
        $hash_same_2,                   // string(69) "182cb5253686f281ad0276c0165f5e10662ee1fc515fddfac4588c54df27cac4e5bb4"
        $hashService->verifyRandomHash( // bool(true)
            $hash_same_2,
            $string_1,
            $salt_1,
            $hmac_key_1,
        ),
    ],
    [
        // 生成時のソルトが異なるのでverify失敗
        $hash_salt,                     // string(69) "8401dfd573c999831b96d21785765a6a253d60edcdea910c73629a969b328475b1511"
        $hashService->verifyRandomHash( // bool(false)
            $hash_salt,
            $string_1,
            $salt_1,
            $hmac_key_1,
        ),
    ],
    [
        // 生成時のHMACキーが異なるのでverify失敗
        $hash_hmac_key,                 // string(69) "b449f1d77ff5bca9cfc58017c052e61b98d5a93fb484a36914a854a3bec74be001012"
        $hashService->verifyRandomHash( // bool(false)
            $hash_salt,
            $string_1,
            $salt_1,
            $hmac_key_1,
        ),
    ],
    [
        // 生成時の文字列が異なるのでverify失敗
        $hash_string_2,                 // string(69) "c76f044bd2905df829d1b0d9b640ba99afdc81c9fbc9fd2f4182af1bb17c1a342de25"
        $hashService->verifyRandomHash( // bool(false)
            $hash_string_2,
            $string_1,
            $salt_1,
            $hmac_key_1,
        ),
    ],
);
```

### ランダム暗号化

[](#ランダム暗号化)

`RandomCryptService::encrypt()`を用いて**データ、パスワード、ソルト、HMACキーが同じであっても常に異なる暗号化テキスト**を返します。

暗号化文字列として破綻しているようにみえる文字列を返すため、実装を含めた全ての情報が揃わない限り、事実上、復号は不可能です。

生成された暗号化テキストは `RandomCryptService::decrypt()` で復号できます。

実行例：

```
use bypassflow\crypt\CryptService;
use bypassflow\crypt\HashService;
use bypassflow\crypt\RandomCryptService;

$text       = 'text';
$password   = 'pass';
$salt       = 'salt';
$hmac_key   = 'key';

// ==============================================
$randomCryptService = RandomCryptService::factory(
    CryptService::factory(),
    HashService::factory(),
);

$cipherResult1  = $randomCryptService->encrypt(
    $text,
    $password,
    $salt,
    $hmac_key,
);

$cipherResult2  = $randomCryptService->encrypt(
    $text,
    $password,
    $salt,
    $hmac_key,
);

\var_dump(
    // 同じデータで異なる暗号化結果が出力されているが、共に正しく復号出来ている
    $cipherResult1->cipher_text,        // string(94) "bW9PVmUyZjVMwd1A2WVBGVjFCdlBnZnh1V1lYZ1pkcXd3QWpYYUtIeTVwSW95REZvVHF6c0w0R3hJRXRGcW9sdVN0ZA==="
    $randomCryptService->decrypt(       // string(4) "text"
        $cipherResult1->cipher_text,
        $password,
        $salt,
        $hmac_key,
    )->text,
    $cipherResult2->cipher_text,        // string(94) "aW5IU2Y1ND3RLTWI1cVRFSmM2d2lkRGRUY1B4SEZQaWxJaERGZXdNRXowUnlYQnRpR25JaW1hRHRGVHNFU01QRVQwMA==="
    $randomCryptService->decrypt(       // string(4) "text"
        $cipherResult2->cipher_text,
        $password,
        $salt,
        $hmac_key,
    )->text,
);
```

### ハッシュ

[](#ハッシュ)

`HashService::factory()->stretchedHmacString($string, $key, $count)` とすることで十分にストレッチされたハッシュ文字列を容易く得る事が出来ます。

### OpenSSLを利用した暗号化

[](#opensslを利用した暗号化)

`CryptService::factory()->encrypt($text, $passphrase)`とすることで容易にOpenSSLを利用した暗号化を扱えます。

復号も`CryptService::factory()->decrypt($cipher_text, $passphrase)`とすることで容易に行えます。

また、OpenSSLを利用した暗号化でありがちなIVなどの暗号化コンテキストの保存も次の形で容易に行う事ができます。

暗号化

```
use bypassflow\crypt\CryptService;

$encryptResult = CryptService::factory()->encrypt($text, $passphrase);

$cipher_text    = $encryptResult->cipher_text;  // 暗号化された文字列

$crypto_context = $$encryptResult->cryptConfig->crypto_context; // これを保存する
```

復号

```
use bypassflow\crypt\CryptService;

$cryptService   = CryptService::factoryFromCryptContext($crypto_context);   // 暗号化時に保存した$crypto_contextを引数として渡す

$decryptResult  = $cryptService->decrypt($cipher_text, $passphrase);

$text   = $decryptResult->text; // 簡単確実に復号できた
```

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance50

Moderate activity, may be stable

Popularity13

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 50% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

357d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/95a802f3e306e0656f6d96c12b9ad645aa54a0dc015d418f2c5dc74204c05561?d=identicon)[Project ICKX](/maintainers/Project%20ICKX)

![](https://www.gravatar.com/avatar/848d118ef781572b0ea97fb95dc8a1153288bb03fab8559cf6cdc774563e1fc4?d=identicon)[wakabadou](/maintainers/wakabadou)

---

Top Contributors

[![ickx](https://avatars.githubusercontent.com/u/17040876?v=4)](https://github.com/ickx "ickx (1 commits)")[![wakabadou](https://avatars.githubusercontent.com/u/16948950?v=4)](https://github.com/wakabadou "wakabadou (1 commits)")

---

Tags

cryptbypassflow

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/bypassflow-crypt/health.svg)

```
[![Health](https://phpackages.com/badges/bypassflow-crypt/health.svg)](https://phpackages.com/packages/bypassflow-crypt)
```

###  Alternatives

[passwordlib/passwordlib

A Password Hashing Library

377220.6k6](/packages/passwordlib-passwordlib)[bordoni/phpass

Portable PHP password hashing framework

244.4M26](/packages/bordoni-phpass)[vlucas/pikirasa

PKI public/private RSA key encryption using the OpenSSL extension

104101.1k1](/packages/vlucas-pikirasa)[xxtea/xxtea

XXTEA is a fast and secure encryption algorithm. This is a XXTEA library for PHP.

11341.7k](/packages/xxtea-xxtea)[aplus/crypto

Aplus Framework Crypto Library

161.6M1](/packages/aplus-crypto)[miladrahimi/phpcrypt

Encryption, decryption, and hashing tools for PHP projects

3171.5k2](/packages/miladrahimi-phpcrypt)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
