spomky-labs / php-aes-gcm
AES GCM (Galois Counter Mode) PHP实现。
v1.2.1
2018-11-07 14:39 UTC
Requires
- php: >=5.4
- lib-openssl: *
- beberlei/assert: ^2.4
- symfony/polyfill-mbstring: ^1.1
Requires (Dev)
- phpunit/phpunit: ^4.5|^5.0
- satooshi/php-coveralls: ^1.0
Suggests
- ext-crypto: Highly recommended for better performance.
README
发布过程
发布过程 在此描述。
先决条件
该库已在PHP 5.4至PHP 7.1、HHVM和夜间分支上成功测试。
如果你使用PHP 7.1+,此库的性能非常好。如果你不使用PHP 7.1+,我们强烈建议你安装PHP Crypto扩展。这个扩展将显著提高此库的性能。使用我们的纯PHP方法,你的性能将会较低。
安装
安装此库的首选方式是依赖Composer
composer require "spomky-labs/php-aes-gcm"
如何使用
<?php use AESGCM\AESGCM; // The Key Encryption Key $K = hex2bin('feffe9928665731c6d6a8f9467308308feffe9928665731c'); // The data to encrypt (can be null for authentication) $P = hex2bin('d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39'); // Additional Authenticated Data $A = hex2bin('feedfacedeadbeeffeedfacedeadbeefabaddad2'); // Initialization Vector $IV = hex2bin('cafebabefacedbaddecaf888'); // $C is the encrypted data ($C is null if $P is null) // $T is the associated tag list($C, $T) = AESGCM::encrypt($K, $IV, $P, $A); // The value of $C should be hex2bin('3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710') // The value of $T should be hex2bin('2519498e80f1478f37ba55bd6d27618c') $P = AESGCM::decrypt($K, $IV, $C, $A, $T); // The value of $P should be hex2bin('d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39')
附加标签
某些加密算法的实现可能会在密文末尾附加标签。例如,Java实现通常使用这种方法。
此库提供了一种简单的方法来生成此类密文并读取它。
<?php use AESGCM\AESGCM; // The values $K, $P, $A, $IV hereafter have the same meaning as above // $C is the encrypted data with the appended tag $C = AESGCM::encryptAndAppendTag($K, $IV, $P, $A); // The value of $C should be hex2bin('3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda27102519498e80f1478f37ba55bd6d27618c') $P = AESGCM::decryptWithAppendedTag($K, $IV, $C, $A); // The value of $P should be hex2bin('d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b392519498e80f1478f37ba55bd6d27618c')
标签长度
默认情况下,标签长度为128位。这个值强烈推荐,但你可能需要使用另一个标签长度。根据加密算法规范,标签长度可以是128、120、112、104或96位。
<?php use AESGCM\AESGCM; // The values $K, $P, $A, $IV hereafter have the same meaning as above $TL = 96; // In this example the tag length will be 96 bits list($C, $T) = AESGCM::encrypt($K, $IV, $P, $A, $TL); // The value of $C should be hex2bin('3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710') // The value of $T should be hex2bin('2519498e80f1478f37ba55bd')
标签长度在执行解密操作时自动计算,使用方法AESGCM::decrypt
。然而,如果标签附加在密文末尾且不是128位,则必须设置它
<?php // The values $K, $IV, $C, $A hereafter have the same meaning as above $TL = 96; // In this example the tag length will be 96 bits $P = AESGCM::decryptWithAppendedTag($K, $IV, $C, $A, $TL);
支持
我为你的问题提供解决方案并回答你的问题。
如果你真的喜欢那个项目和我所做的工 作,或者如果你想我优先处理你的问题,那么你可以通过几杯🍻或更多来帮助我!
贡献
对新功能、错误修复以及所有其他使此库更有用的想法都欢迎。你可以提供的最佳贡献是通过修复需要帮助的打开问题。
请确保遵循这些最佳实践。
基准测试
在test
目录中,有一个用于运行加密和解密基准测试的小脚本。你可以在你的环境中运行它来检查加密/解密操作需要多少时间。
php ./tests/Benchmark.php
许可
此库在MIT许可下发布。