我正在寻找一种机制来生成随机唯一字母数字 key 以重置用户密码。
我在这个方向上看了很多,但看起来这东西不是很明显。
我试过类似的东西:
new String(encodeBase64URLSafe(UUID.randomUUID()));
但在阅读了以下文章后:Is UUID.randomUUID() suitable for use as a one-time password?看起来这种方式并不完全正确。
如果您能回答以下问题,我们将不胜感激:
- 使用 UUID 生成此类 token 的安全方法是什么?
- 我们是否需要将 UUID 字符串转换为 base64 以获得安全的 URL,或者从生成的字符串中删除破折号就足够了?
- 在此类目的中使用此链接中的机制是否正确 How to generate a random alpha-numeric string? ,为什么?
最佳答案
使用 UUID 是安全可靠的。链接的文章只是说 UUID 对于这种安全性来说可能有点太多了。但是好吧……如果你“太”安全,没有人会责怪你。
UUID 只是字母数字字符和破折号。所以如果你需要把它放在一个查询字符串或一个 URL 中,你没有什么可以逃避的。如果需要,您可以删除破折号以节省一些空间。但这不是必需的。
这个机制也是安全的。两者(UUID 和这个)都可以工作。
对于这种安全性,您所要做的就是确保您的 token 是随机生成的(即使是部分生成的)。
关于java - 通过 UUID 生成密码重置 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31244343/