mnavarrocarter / fernet
PHP的Fernet加密的现代实现
3.0.0
2022-05-05 17:38 UTC
Requires
- php: >=8.0
- ext-openssl: *
- chrisharrison/clock: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.22
README
在两个当事人之间有效地和私密地交换强加密信息。
安装
composer require mnavarrocarter/fernet
用法
开始使用非常简单
// Instantiate the Fernet class using the static factory and passing the base64url encoded key. $fernet = MNC\Fernet::create('cw_0x689RpI-jtRR7oE8h_eQsKImvJapLeSbXpwF4e4='); // Then, you can encode messages with your fernet instance $token = $fernet->encode('hello'); // You can then decrypt that token back to the original message $message = $fernet->decode($token);
Fernet是什么?
Fernet是一种加密消息并编码为安全令牌的规范,它采用了一些已建立的、长期的安全实践,如块大小、填充和签名哈希,虽然不是最近制定的。
加密使用32字节的密钥对称进行。
您可以在这里阅读有关规范的更多详细信息。
为什么选择Fernet?
主要有三个原因
安全性:该规范是由密码学家而非开发者制定的,具有诸如消息填充、标准块大小和签名验证(在解密之前)等众所周知、长期建立的安全实践。
可进化性:每个令牌都有一个版本(当前和唯一的Fernet版本是0x80)。实现会查看版本以决定如何处理令牌。不是用户定义一组算法,而是规范版本。随着计算能力的进步,现在普遍使用的算法可能会变得更加容易破解,Fernet可以通过推出新版本的规范来轻松解决这个问题。
便利性:根据消息,Fernet令牌可以很小。它们可以轻松地满足cookie大小限制,也可以轻松地粘贴在URL中,还可以在请求头或正文中共享而不会出现问题。
Fernet与JOSE的比较
Fernet解决了现有“行业标准”消息交换解决方案(如JOSE标准)中存在的所有问题。
我可以在这里继续写很多,但如果您想了解为什么,可以查看这篇文章。