btccom/justencrypt

v0.2.0 2018-03-08 22:28 UTC

This package is not auto-updated.

Last update: 2024-09-10 04:58:13 UTC


README

JustEncrypt PHP 库

===========================

Build Status Code Coverage Scrutinizer Code Quality Latest Stable Version

PHP 支持

此库支持 PHP 版本 5.6 到 7.1。强烈推荐使用 PHP 7.1,因为 OpenSSL 扩展现在支持我们使用的算法。否则,您将回退到在原生 PHP 中实现的更慢版本。

用法

密钥派生

以下示例展示了从密码/盐/迭代中简单派生密钥 简单的派生示例

KeyDerivation::generateSalt() 将返回使用当前默认值的盐。 Encryption::encrypt 将使用库默认值生成上面的盐/迭代

加密

加密的 blob 是 saltLen (uint8) || salt || iv || ct || tag 的连接。序列化的参数使我们能够在只知道密码的任何机器上解密。

简单的加密示例 使用子密钥和根密钥恢复的高级示例

Encryption::encrypt 返回一个 EncryptedBlob,它封装了密钥派生数据和明文详情。它还公开了用于密文的实用方法

  • $blob->getBinary() - 返回加密 blob 的原始二进制数据,用于 base64 等。
  • $blob->getMnemonic() - 返回加密口令(见下文)
  • $blob->getBuffer() - 返回一个缓冲区,对于转换为十六进制等很有用

加密口令

为了使加密结果对人类可读(因此更容易写下),可以将它编码为口令。我们使用比特币 BIP39 编码熵到口令的方式,但忽略了 BIP39 原始的(弱的)密码保护。我们还确保数据被正确填充。

$encrypted->getMnemonic() 调用 EncryptedMnemonic 类以生成 加密口令示例

选择迭代次数

默认迭代次数是 justencrypt.KeyDerivation.defaultIterations,设置为 35000,这是一个在使用密码时应足够安全的数字。
如果您没有传递 iterations 参数,它将默认为此值。

如果您使用 CSPRNG 生成的随机字节字符串作为密码进行加密,则可以使用相同的代码,但在那种情况下将迭代次数设置为 1 是安全的,因为没有必要拉伸密码。
在这种情况下,您可以使用 justencrypt.KeyDerivation.subkeyIterations 来明确您的意图。

这种用法在 此示例 中得到了演示。

开发/贡献

有关贡献的详细信息,请参阅 CONTRIBUTING.md

许可证

JustEncrypt 在 MIT 许可证的条款下发布。有关更多信息,请参阅 LICENCE.md 或查看 https://open-source.org.cn/licenses/MIT