加密安全的唯一ID [英] Cryptographically secure unique id
问题描述
我想使用php生成加密安全的唯一uuid.
uniqid()提供唯一但不安全的ID,openssl_random_pseudo_bytes()提供安全但不唯一的ID.两者(以下代码)的组合是正确的方法还是有更好的解决方案?
uniqid(bin2hex(openssl_random_pseudo_bytes(10)), true);
我想使用php生成加密安全的唯一uuid.
好的,这很容易.
uniqid()提供唯一但不安全的ID,openssl_random_pseudo_bytes()提供安全但不唯一的ID.
是什么让您认为 UUIDv4规范,并使用了PHP7 random_bytes()
函数.
对于PHP 5项目,您可以使用 random_compat 从PHP 7中填充random_bytes()
./p>
I want to generate cryptographically secure unique uuids using php.
uniqid() provides unique but not secure ids and openssl_random_pseudo_bytes() provides secure but not unique ids. Is the combination of the two(following code) a proper approach or is there a better solution?
uniqid(bin2hex(openssl_random_pseudo_bytes(10)), true);
I want to generate cryptographically secure unique uuids using php.
Okay, that's easily done.
uniqid() provides unique but not secure ids and openssl_random_pseudo_bytes() provides secure but not unique ids.
What makes you think a cryptographically secure pseudorandom number isn't unique?
/**
* Return a UUID (version 4) using random bytes
* Note that version 4 follows the format:
* xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
* where y is one of: [8, 9, A, B]
*
* We use (random_bytes(1) & 0x0F) | 0x40 to force
* the first character of hex value to always be 4
* in the appropriate position.
*
* For 4: http://3v4l.org/q2JN9
* For Y: http://3v4l.org/EsGSU
* For the whole shebang: https://3v4l.org/LNgJb
*
* @ref https://stackoverflow.com/a/31460273/2224584
* @ref https://paragonie.com/b/JvICXzh_jhLyt4y3
*
* @return string
*/
function uuidv4()
{
return implode('-', [
bin2hex(random_bytes(4)),
bin2hex(random_bytes(2)),
bin2hex(chr((ord(random_bytes(1)) & 0x0F) | 0x40)) . bin2hex(random_bytes(1)),
bin2hex(chr((ord(random_bytes(1)) & 0x3F) | 0x80)) . bin2hex(random_bytes(1)),
bin2hex(random_bytes(6))
]);
}
The above example conforms to the UUIDv4 specification and uses PHP7's random_bytes()
function.
For PHP 5 projects, you can use random_compat to polyfill random_bytes()
from PHP 7.
这篇关于加密安全的唯一ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!