gpt4 book ai didi

php - 如何生成一个128位长的字符串?

转载 作者:可可西里 更新时间:2023-11-01 00:52:31 25 4
gpt4 key购买 nike

基本上,我正在寻找一个函数来执行以下操作

generateToken(128)

这将返回一个由整数或字母字符组成的 128 位字符串

澄清:根据评论,我不得不更改问题。显然,如果需要 128 位,我正在寻找一个长度为 16 个字符的字符串。

最佳答案

是否有理由必须将字符串限制为整数?这实际上使问题变得更加困难,因为每个数字给你 3.3 位(因为 2^3.3 ~= 10)。以这种方式生成恰好 128 位的 token 是很棘手的。

更容易的是允许十六进制编码(每个字符 4 位)。然后您可以生成 128 个真正的随机位,然后将它们编码为十六进制以用于您的应用程序。 Base64 编码(每个字符 6 位)对于这种事情也很有用。

openssl_random_pseudo_bytes 会给你一串随机字节,你可以使用 bin2hex 进行编码,否则你可以在你自己的 token 中使用 mt_rand -生成例程。

编辑:阅读问题的更新后,您似乎想要生成一个表示 128 位数据的标记,而实际的字符串长度(以字符为单位)并不那么重要。如果我猜对了你的意图(这是一个唯一的 ID,可能用于识别/认证目的)那么我建议你使用 openssl_random_pseudo_bytes 为你的问题生成正确的位数,在这种情况下128(16 字节)。然后,您可以以您认为合适的任何方式对这些位进行编码:hex 和 base64 是两种可能性。

请注意,十六进制编码将使用 32 个字符来编码 128 位数据,因为每个字符仅编码 4 位 (128/4 = 32)。 Base64 将使用 22 个字符 (128/6 = 21.3)。每个字符占用 8 位的存储,但只编码 4 或 6 位的信息

请注意不要将编码字符串长度与原始数据长度混淆。如果您选择使用字母数字字符(a-z、A-Z、0-9)的 16 个字符的字符串,则每个字符只能获得 6 位信息(62 的对数基数 2 接近 6),因此您的 16 个字符的字符串将仅编码96 位信息。您应该将您的 token 视为一个不透明的字节数组,当您实际尝试通过网络发送它或将其放入 cookie 或其他任何内容时,只需要担心将其转换为字符串/从字符串转换为字符串。

关于php - 如何生成一个128位长的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4120690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com