我正在考虑使用Base64在用户集合中存储SecurityStamp。在进入陷阱之前,我试图了解ASP团队选择使用Base32而不是简单使用Base64的原因。
SecurityStamp不是人类应该在请求中手动读取或传递的内容。在添加内部Base32实现而不是使用现有的Base64方面,我找不到任何明显的优势。
private static string NewSecurityStamp()
{
byte[] bytes = new byte[20];
_rng.GetBytes(bytes);
return Base32.ToBase32(bytes);
}
[如果您查看字母Base32 is using,您会注意到它全部是大写字母和234567
。这样做是为了减少代码传输时的人为错误(请参见this SO answer中的更多背景信息。)>
[当您进一步检查UserManager
源代码时,您会看到NewSecurityStamp
被GenerateNewAuthenticatorKey
引用,我相信该代码旨在提供人类可读的输出(例如,当您获得一个2FA时,没有要扫描的QR码。