shawm11/iron-crypto

PHP 实现的 iron 密码学实用工具

1.0.8 2022-01-25 19:24 UTC

This package is auto-updated.

Last update: 2024-08-31 00:27:55 UTC


README

Iron Crypto PHP

Version Number PHP Version License

这是 iron 密码学实用工具的 7.0.1 版本的 PHP 实现。

重要

iron 是那些罕见的可以被认为是“完整”的项目之一。这意味着因为这个仓库的更改不频繁,因为可能每隔几年才需要更新一次开发依赖项。

如果文档中存在错误或错误,请创建一个 问题。问题将尽快得到回应或解决。

目录

什么是 iron?

根据 iron API

iron 是一个用于使用对称密钥加密和消息完整性验证来封装 JSON 对象的密码学实用工具。换句话说,它允许您加密一个对象,将其发送出去(在 cookie、认证凭证等中),然后接收回来并解密它。该算法确保消息未被篡改,并提供了一种简单的密码轮换机制。

iron 可以被认为是 JSON Web Tokens (JWT) 的替代品。查看 这个 iron 问题 以了解 iron 和 JWT 之间的差异。

提示

iron 通常全部小写拼写;然而,在这个包的类名中,i 是大写的。

入门

先决条件

  • Git 2.9+
  • PHP 5.5.0+
  • OpenSSL PHP 扩展
  • JSON PHP 扩展
  • Composer

安装

使用 Composer 下载和安装

composer require shawm11/iron-crypto

使用方法

IronIron2

可以使用 IronIron2 类来封装或解封装 iron 字符串。 Iron2 类包括一个针对 PDKDF2 问题 的修复,因此比 Iron 类更安全。然而,IronIron2 类之间不兼容。使用 Iron2 创建的封装字符串的 MAC 格式版本是 2.1 而不是 2,以表示不兼容。

使用 Iron 类创建的 iron 字符串可以被其他 iron 实现解封装,并且它可以解封装来自其他实现的其他 iron 字符串。这并不适用于 Iron2 类。

总的来说,如果

  • 您需要或想要更高的安全性
  • 与其他 iron 实现的兼容性不是很重要

则使用 Iron2 类(推荐),如果

  • 解封装由另一个实现创建的 iron 字符串
  • 创建的封装 iron 字符串将被另一个实现解封装

演示

假设我们想要“封装”这个数组

[
    'a' => 1,
    'b' => 2,
    'c' => [3, 4, 5],
    'd' => ['e' => 'f']
]

使用这个密码:some_not_random_password_that_is_at_least_32_characters

使用 Iron2::seal() 进行封装会给我们

Fe26.2.1**50a5bec38a21775318b487bda8eb5bac8ef0033fa14ab3d7d963643b648fb50a*dZ7cUbgFie4_EKYQ1H1RyA*mclk0QCWDb-irF7E5quIcRa52t4TXmo3Jq1BnJFgVv4dZq9fWnB0CUdRA8bKXIEX**da6bb68d955f9db04e9739a2a197ce9780de56f9be26ba24b7bf145c12851d53*0xYQdFBJxipufS03zBu6VZmIlHClv6CTlCc_To1rbIU

注意输出以 Fe26.2.1** 开头。

另一方面,使用 Iron::seal() 进行封装会给我们

Fe26.2**6589f8726e6b87f875bd9cbdea1985642d8d2e82168360586cf9cdb46b370fcc*-2XpTXRy5ZL0gJK6Qx9i4Q*hZa7pqt31QIR_ihVZ6qjUv_b0v5KLd1Enhq5q0IjbSfbvnUm_kRDahIC-nAoCsjJ**c74d1c46525da622ddc699c8dabf3902e1f1497bf54e086004fa560d85082e71*1qpfA_ZlR4r5Uo99Py1UU_l7v8lZYjtFI-4QVFYHA1g

注意这个输出以 Fe26.2** 而不是 Fe26.2.1** 开头。

现在,假设我们想使用集合中的一个密码来加密相同的数组。这样做可以通过密码轮换提高安全性。

我们将选择集合中的一个密码来加密上面的数组

[
    "some_not_random_password_that_is_at_least_32_characters1",
    "some_not_random_password_that_is_at_least_32_characters2",
    "some_not_random_password_that_is_at_least_32_characters3" // Chose this one to create output
]

这给了我们

Fe26.2.1*2*292e8975ab168c4aff5af0674ae7e49f11307a367e75aee7f5f71063d8132523*QkjFNS0jl7963ENLosY25g*uKNcL7JAlDPURnvMb0C_jHyELe0b84554QcYzeaYWiHI1x0Qwq3Njikf_z_iLYxX**18280c5865db88bd915570325c56f8b6897a3daf710d8a9c9330ead5f392ec4d*ogb2rO5-QiOQk28gfpa3p2PimRM5y015C892SQ_c3y8

注意输出以 Fe26.2.1*2* 开头,而不是 Fe26.2.1**。这额外的 2 是密码 ID,在这种情况下,它是密码集合中选择的密码的索引。

代码示例

API

查看API参考以获取关于API的详细信息。

安全注意事项

查看iron API文档的安全注意事项部分。

相关项目

  • Oz PHP 实现 — Oz 是一种替代 OAuth 1.0a 和 OAuth 2.0 三方授权的网页授权协议。Oz 采用了 Hawk 和 iron
  • Hawk PHP 实现 — Hawk 是一种替代 OAuth 1.0a 和 OAuth 2.0 双方认证的 HTTP 认证方案。

贡献/开发

请阅读CONTRIBUTING.md以获取关于编码风格、Git 提交信息指南和其他开发信息的详细信息。

版本控制

本项目使用 SemVer 进行版本控制。有关可用的版本,请参阅本存储库上的标签。

许可证

本项目是开源软件,受 MIT 许可证许可。