簡體   English   中英

生成128位十六進制數

[英]Generate 128 bit hex number

我想在PHP中生成一個隨機的128位十六進制數。

我怎樣才能做到這一點?

最簡單的我知道:

$str = openssl_random_pseudo_bytes(16);

您還可以通過在每個循環中附加字符來構建一個包含16個字符的字符串:

for ($i = 0; $i != 16; ++$i) {
    $str .= chr(mt_rand(0, 255));
}

要將其轉換為十六進制,請使用bin2hex($str) 或者,生成一個UUID v4,如我之前寫的回答中所述。

從PHP 7開始, random_bytes是生成隨機數據的最佳方法,但您可以使用random_compat庫將random_bytes()前向兼容支持添加到該語言的舊版本中。 該庫根據最佳回退方法定義函數,包括另外提到的openssl_random_pseudo_bytes()

// generates 64-character (256-bit) key
function generate_256bit() {
    return bin2hex(random_bytes(32));
}

// generates 32-character (128-bit) key
function generate_128bit() {
    return bin2hex(random_bytes(16));
}

// 256-bit: f3af82d0bedc3a91b3b5a51beefe553e33a17912de45d3302ed0216ad867cd55
// 128-bit: 4d7245e2d61cfcce2feafd7e687cdb0e

從PHP 5.3開始:

$rand128_hex = bin2hex(openssl_random_pseudo_bytes(16));
<?php
function string_random($characters, $length)
    {
    $string = '';
    for ($max = mb_strlen($characters) - 1, $i = 0; $i < $length; ++ $i)
        {
        $string .= mb_substr($characters, mt_rand(0, $max), 1);
        }
    return $string;
    }

// 128 bits is 16 bytes; 2 hex digits to represent each byte
$random_128_bit_hex = string_random('0123456789abcdef', 32);
// $random_128_bit_hex might be: '4374e7bb02ae5d5bc6d0d85af78aa2ce'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM