shawm11 / iron-crypto
PHP 实现的 iron 密码学实用工具
Requires
- php: >=5.5.0
Requires (Dev)
- php: >=7.3.0
- codeception/assert-throws: ^1.0
- codeception/specify: ^1.1
- codeception/verify: ^2.0
- consolidation/robo: ^2.1
- phpstan/phpstan: ^0.12.0
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.2
README
Iron Crypto PHP
这是 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
使用方法
Iron
与 Iron2
类
可以使用 Iron
或 Iron2
类来封装或解封装 iron 字符串。 Iron2
类包括一个针对 PDKDF2 问题 的修复,因此比 Iron
类更安全。然而,Iron
和 Iron2
类之间不兼容。使用 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 许可证许可。