tmwk/phpcrypt

PHP 加密

安装: 279

依赖者: 0

建议者: 0

安全性: 0

类型:供应商

v1.0.4 2019-02-06 13:37 UTC

This package is not auto-updated.

Last update: 2024-09-13 12:58:26 UTC


README

PHPCRYPT 是什么?

phpCrypt 是一个用 PHP 编写的加密库。它旨在实现所有主要的加密算法、模式、填充方法和用于加密和解密的其它工具。phpCrypt 不依赖于 mCrypt、PHP 扩展或 PEAR 库。

它目前支持许多广泛使用的算法。此外,它还支持许多流行的加密模式。还有工具实现不同的填充方案,以及为需要初始化向量的模式提供多种创建初始化向量的方法。

phpCrypt 由 Ryan Gilfether 开发 http://www.gilfether.com/phpcrypt

phpCrypt 正在不断发展。如果您有任何问题,发现了错误,或有功能请求,您可以通过 http://www.gilfether.com/contact-ryan 联系 Ryan。

它能在什么上工作?

phpCrypt 版本 0.x 与 PHP 5.3 或更高版本兼容。它可以在任何有 PHP 的 32 或 64 位操作系统上运行。

支持的加密算法、模式和填充

支持的加密算法和模式的列表持续增长,每个新的 phpCrypt 版本都会添加新的算法或模式。当前支持的算法和模式列表如下:

算法

3Way, AES, ARC4 (RC4), Blowfish, CAST-128, CAST-256, DES, Triple DES,
Enigma, RC2, Rijndael, SimpleXOR, Skipjack, Vigenere

模式

CBC, CFB, CTR, ECB, NCFB, NOFB, OFB, PCBC

填充

ANSI X.923, ISO 10126, PKCS7, ISO/IEC 7816-4, Zero (NULL Byte)

文档

此 README 文件作为文档。phpCrypt 网站还列出您需要选择算法、模式、填充和 IV 方法的所有常量,可在 http://www.gilfether.com/phpcrypt 查看。此外,phpCrypt 包含一个 examples 目录,其中包含示例代码,以帮助您入门。

phpCrypt 很容易使用。以下是一个使用 AES-128 和 CBC 模式加密字符串的示例。请注意,如果您是使用 AES-128 算法和 CBC 模式进行加密的新手,这是一个简单而安全的方法。

<?php
include_once("/path/to/phpcrypt/phpCrypt.php");
use PHP_Crypt\PHP_Crypt as PHP_Crypt;

$data = "This is my secret message.";
$key  = "MySecretKey01234";
$crypt = new PHP_Crypt($key, PHP_Crypt::CIPHER_AES_128, PHP_Crypt::MODE_CBC);

$iv = $crypt->createIV();
$encrypt = $crypt->encrypt($data);

$crypt->IV($iv);
$decrypt = $crypt->decrypt($encrypt);
?>

字节填充

某些模式需要填充数据块,如果数据块短于算法所需的块大小。例如,DES 加密在 8 字节数据块上工作。如果您有一个 6 字节的数据块,那么它可能需要填充 2 字节才能进行加密。某些模式不需要填充数据。

默认情况下,phpCrypt 在必要时使用 NULL 字节填充,以保持与 mCrypt 的兼容性。

phpCrypt 还提供其他填充方法。您可以通过两种方式指定要使用的填充。最简单的方法是在构造函数中声明它,如下所示

$crypt = new PHP_Crypt($key, PHP_Crypt::CIPHER_AES_128, PHP_Crypt::MODE_CBC, PHP_Crypt::PAD_PKCS7);

您也可以通过调用 phpCrypt::padding() 方法来设置填充

$crypt = new PHP_Crypt($key, PHP_Crypt::CIPHER_AES_128, PHP_Crypt::MODE_CBC);
$crypt->padding(PHP_Crypt::PAD_PKCS7);

如果为不需要填充的模式设置了填充,则忽略填充方法。您可以在 http://www.gilfether.com/phpcrypt 获取所有可用的填充方法列表。

您始终可以选择在将数据发送到 phpCrypt 之前自己填充数据。在这种情况下,您不需要担心 phpCrypt 的填充方法。

注意:在解密过程中不会去除 NULL 字节填充。这留给您来做。phpCrypt 无法确定空字节是原始数据的一部分还是作为填充添加的。

创建初始化向量

默认情况下,phpCrypt 将使用 PHP mt_rand() 生成用于创建 IV 的随机数据。此方法在所有操作系统上受支持,但根据您的操作系统,还有更安全的生成随机数据的方法。

Linux & UNIX

在基于Unix的系统上,phpCrypt支持从/dev/random/dev/urandom读取。可以通过传递以下常量之一到phpCrypt::createIV()来实现

$iv = $crypt->createIV(PHP_Crypt::RAND_DEV_RAND);
or
$iv = $crypt->createIV(PHP_Crypt::RAND_DEV_URAND);

微软Windows

在Windows系统上,您可以选择使用包含在微软CAPICOM SDK中的随机数生成器,这更为安全。在此功能生效之前,您必须安装微软CAPICOM SDK并启用PHP com_dotnet扩展

  • 从微软下载CAPICOM:[http://www.microsoft.com/en-us/download/details.aspx?id=25281](http://www.microsoft.com/en-us/download/details.aspx?id=25281)
  • 双击您下载的MSI文件,并按照安装说明操作
  • 打开命令提示符,并注册DLL:regsvr32 C:\Program Files\PATH TO\CAPICOM SDK\Lib\X86\capicom.dll
  • 现在编辑php.ini以启用com_dotnet扩展:extension=php_com_dotnet.dll
  • 如果您正在以Apache模块运行PHP,请重新启动Apache。

要使用CAPICOM中的Windows随机数生成器,可以这样调用createIV()

$iv = $crypt->createIV(PHP_Crypt::RAND_WIN_COM);

提供自己的IV

您可以选择不使用phpCrypt::createIV()而自己创建IV。如果您希望创建自己的IV或使用他人提供的IV进行解密,请使用phpCrypt::IV()方法设置IV

$crypt->IV($your_custom_iv);

IV的长度必须与加密算法使用的块大小相等。如果IV长度不正确,phpCrypt将发出PHP警告并失败。

并非所有模式都需要IV。如果为不需要IV的模式设置了IV,则IV将被忽略。您可以在[http://www.gilfether.com/phpcrypt](http://www.gilfether.com/phpcrypt)上找到完整的IV常量列表和需要IV的模式列表

创建密钥

phpCrypt包括一个辅助函数来创建用于密钥的随机字节字符串。这可以替代上面示例中设置自己的密钥。PHP_Crypt::RAND常量与createIV()函数中使用的相同。第二个参数表示要创建的随机字节数。

<?php
$key = PHP_Crypt::createKey(PHP_Crypt::RAND, 16);
$text = "This is my secret message."
$crypt = new PHP_Crypt($key, PHP_Crypt::CIPHER_AES_128, PHP_Crypt::MODE_CBC);
?>

请参阅示例目录中的示例代码,以展示createKey()函数的使用。

密钥长度必须与加密算法所需的尺寸(以字节为单位)相等。phpCrypt不会填充密钥,如果密钥大小过小,它将发出PHP警告并失败。加密算法密钥长度在[http://www.gilfether.com/phpcrypt](http://www.gilfether.com/phpcrypt)中列出

常量完整列表

要查看可用于加密、模式和填充的完整常量列表,请访问phpCrypt网站:[http://www.gilfether.com/phpcrypt](http://www.gilfether.com/phpcrypt)

GPL相关内容

此文件是phpCrypt的一部分

phpCrypt是免费软件:您可以根据自由软件基金会发布的GNU通用公共许可证的条款重新分配和/或修改它,许可证版本为3,或(根据您的选择)任何后续版本。

本程序的分发是希望它会有用,但没有任何保证;甚至没有对适销性或特定用途的隐含保证。有关详细信息,请参阅GNU通用公共许可证。

您应该已经收到随本程序一起提供的GNU通用公共许可证副本。如果没有,请参阅[https://gnu.ac.cn/licenses/](https://gnu.ac.cn/licenses/).

请阅读此分发中包含的GPL文件,以获取完整的许可证信息。