PHP的Fernet加密的现代实现

3.0.0 2022-05-05 17:38 UTC

This package is auto-updated.

Last update: 2024-09-05 22:37:31 UTC


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标准)中存在的所有问题。

我可以在这里继续写很多,但如果您想了解为什么,可以查看这篇文章