初始化键值 php,如何在PHP中创建uniqe键值?

您正在寻找加密密钥?

不要在涉及安全性的任何上下文中使用uniqid().在这种情况下使用它是太可预测的了.

PEAR::Crypt_RSA软件包允许您在PHP中生成加密强密钥.安装在本地PEAR安装中后,您可以使用它来生成密钥,如下所示:

require_once 'Crypt/RSA.php';

// Creates a 96-bit key, which is 24 hex chars long

$key_pair = new Crypt_RSA_KeyPair(96);

//Returns public key from the pair

$public_key = $key_pair->getPublicKey();

//Returns private key from the pair

$private_key = $key_pair->getPrivateKey();

UUID也可能对您的目标有益.这是一个将在所有系统上生成符合标准的UUID的类:

/**

* UUID generator class

*

* Generates valid RFC 4211 compliant Universally Unique IDentifiers (UUID) version 3, 4 and 5.

* UUIDs generated validate using the OSSP UUID Tool, and the output for named-based UUIDs are

* exactly the same. This is a pure PHP implementation.

*

* Usage:

*

* Name-based UUID:

*

* $v3uuid = UUID::v3('1546058f-5a25-4334-85ae-e68f2a44bbaf', 'SomeRandomString');

* $v5uuid = UUID::v5(UUID::NS_URL, 'http://www.google.com/');

*

* Pseudo-random UUID:

*

* $v4uuid = UUID::v4();

*

*

* Originally found at: http://www.php.net/manual/en/function.uniqid.php#94959

*

* @author Andrew Moore

*

*

* Modifications made by Henry Merriam on 2009-12-20:

*

* + Added constants for predefined namespaces as defined in RFC 4211 Appendix C.

* + NS_DNS

* + NS_URL

* + NS_ISO_UID

* + NS_X500_DN

*

* + Wrote this documentation comment.

*

*/

class UUID {

const NS_DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; // FQDN

const NS_URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; // URL

const NS_ISO_OID = '6ba7b812-9dad-11d1-80b4-00c04fd430c8'; // ISO OID

const NS_X500_DN = '6ba7b814-9dad-11d1-80b4-00c04fd430c8'; // X.500 DN (in DER or a text output format)

public static function v3($namespace, $name) {

if(!self::is_valid($namespace)) return false;

// Get hexadecimal components of namespace

$nhex = str_replace(array('-','{','}'), '', $namespace);

// Binary Value

$nstr = '';

// Convert Namespace UUID to bits

for($i = 0; $i < strlen($nhex); $i+=2) {

$nstr .= chr(hexdec($nhex[$i].$nhex[$i+1]));

}

// Calculate hash value

$hash = md5($nstr . $name);

// Format and return UUID

return sprintf('%08s-%04s-%04x-%04x-%12s',

// 32 bits for "time_low"

substr($hash, 0, 8),

// 16 bits for "time_mid"

substr($hash, 8, 4),

// 16 bits for "time_hi_and_version",

// four most significant bits holds version number 3

(hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x3000,

// 16 bits, 8 bits for "clk_seq_hi_res",

// 8 bits for "clk_seq_low",

// two most significant bits holds zero and one for variant DCE1.1

(hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,

// 48 bits for "node"

substr($hash, 20, 12)

);

}

public static function v4() {

return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',

// 32 bits for "time_low"

mt_rand(0, 0xffff), mt_rand(0, 0xffff),

// 16 bits for "time_mid"

mt_rand(0, 0xffff),

// 16 bits for "time_hi_and_version",

// four most significant bits holds version number 4

mt_rand(0, 0x0fff) | 0x4000,

// 16 bits, 8 bits for "clk_seq_hi_res",

// 8 bits for "clk_seq_low",

// two most significant bits holds zero and one for variant DCE1.1

mt_rand(0, 0x3fff) | 0x8000,

// 48 bits for "node"

mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)

);

}

public static function v5($namespace, $name) {

if(!self::is_valid($namespace)) return false;

// Get hexadecimal components of namespace

$nhex = str_replace(array('-','{','}'), '', $namespace);

// Binary Value

$nstr = '';

// Convert Namespace UUID to bits

for($i = 0; $i < strlen($nhex); $i+=2) {

$nstr .= chr(hexdec($nhex[$i].$nhex[$i+1]));

}

// Calculate hash value

$hash = sha1($nstr . $name);

// Format and return UUID

return sprintf('%08s-%04s-%04x-%04x-%12s',

// 32 bits for "time_low"

substr($hash, 0, 8),

// 16 bits for "time_mid"

substr($hash, 8, 4),

// 16 bits for "time_hi_and_version",

// four most significant bits holds version number 5

(hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x5000,

// 16 bits, 8 bits for "clk_seq_hi_res",

// 8 bits for "clk_seq_low",

// two most significant bits holds zero and one for variant DCE1.1

(hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,

// 48 bits for "node"

substr($hash, 20, 12)

);

}

public static function is_valid($uuid) {

return preg_match('/^\{?[0-9a-f]{8}\-?[0-9a-f]{4}\-?[0-9a-f]{4}\-?'.

'[0-9a-f]{4}\-?[0-9a-f]{12}\}?$/i', $uuid) === 1;

}

}

不要在涉及安全性的任何上下文中使用uniqid().在这种情况下使用它是太可预测的了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值