byjg / crypto
一个通用的存储库,用于实现具有可定制强密钥生成器的加密算法。
4.9.0
2024-01-05 20:56 UTC
Requires
- php: >=7.4
- ext-openssl: *
Requires (Dev)
- phpunit/phpunit: 5.7.*|7.4.*|9.5.*
README
一个用于对称加密的无密码加密库。
它是如何工作的?
算法是众所周知的,但主要问题是如何存储对称密钥。这个库不是存储密钥,而是使用密钥种子,并且能够根据密钥种子动态生成每个加密的密钥。密钥种子是一个包含32行,每行32字节的列表。
使用方法
<?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);
- 算法必须是
openssl_get_cipher_methods()
返回的算法之一。 - 第二个参数是密钥种子。它是一个包含2-255个条目,每个条目32字节的列表。您可以使用命令
BaseCrypto::getKeySet()
生成它。
示例
以下是一个完整的示例
<?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";
重要
- 不要分享密钥种子。
- 只有拥有用于加密文本的相同密钥种子,您才能解密文本。
附加文档
安装
composer require "byjg/crypto"
运行测试
./vendor/bin/phpunit