预测 UserManager.GenerateUserTokenAsync 个令牌的长度(通过 DataProtectorTokenProvider)

Predicting length of UserManager.GenerateUserTokenAsync tokens (via DataProtectorTokenProvider)

我正在使用 ASP.NET Core 3.1,其中一些自定义逻辑重用了 ASP.NET Core Identity 的 UserManager<TUser> class。我想重用它对 GenerateUserTokenAsync(...) 的能力,例如也使用了相同类型的令牌。电子邮件确认。对于我的应用程序,我需要知道生成的令牌的最大长度

我做了以下研究:

当我在本地机器上随意测试时,我得到了一个 352 个字符的加密字符串。我怎么能预测119个输入字符加密后会变成352个字符呢?更糟糕的是,我的应用程序实际上在 Azure 应用程序服务的生产环境中运行,其中 Azure 的 DPAPI 应该启动,可能使用与本地主机不同的加密方式?

我能否以任何方式预测生成的用户令牌在 Azure 应用服务上的最大长度?我很乐意包含误差范围,但我不知道那需要什么。

默认情况下,DPAPI 使用 AES-256-CBC 作为加密算法,除非您通过 UseCryptographicAlgorithms 更改它。根据默认算法,您的情况的计算方式如下:

因为它是 AES 256,所以它适用于 32 字节的块。因此,使用 CBC 填充,您的输出变为 ((119/32) + 1) * 32 + 16 (IV) = 144。在 base64 之后,它变为 192.

所以,如果是 352,问题是在你的情况下邮票真的是 36 吗?

36 characters for the security stamp (string representation of a GUID)

此外,在已部署环境中,确保 store data protection key outside app 因为应用服务的每个实例都需要指向相同的密钥。