已知长度的十六进制密码是否容易破解?
Are hex passwords of a known length easy to crack?
我有以下 PHP 代码:
$password = bin2hex (openssl_random_pseudo_bytes (16));
它会生成这样的随机密码:
fe6fdebf293e5ec5214cc33fbc632d77
我的问题很简单,鉴于十六进制使用 16 个不同的字符并且密码的长度为 32 个字符,此密码的可能组合数是否为 16^32?或者它是 16^16,因为 OpenSSL 只生成了 16 个字节?
换句话说,由于十六进制的性质,像这样的十六进制密码是否更容易被破解?
一个字节(八位)有 2^8 种可能的组合。
16 个字节(8*16 位)有 2^(8*16) = 2^128 种可能的组合。
以任何形式(纯二进制、十六进制字符串、十进制、base64 编码二进制等)表示这些组合不能改变可能组合的数量。
如果你用另一种方式来计算它们也没关系。 32位十六进制字符串具有相同的组合数:
32 个字符,每个字符有 16 个变体 = 16^32 = (2^4)^32 = 2^(4*32) = 2^128.
这并不奇怪,因为存在从 16 字节到 32 字符十六进制字符串的一对一转换,反之亦然。
我有以下 PHP 代码:
$password = bin2hex (openssl_random_pseudo_bytes (16));
它会生成这样的随机密码:
fe6fdebf293e5ec5214cc33fbc632d77
我的问题很简单,鉴于十六进制使用 16 个不同的字符并且密码的长度为 32 个字符,此密码的可能组合数是否为 16^32?或者它是 16^16,因为 OpenSSL 只生成了 16 个字节?
换句话说,由于十六进制的性质,像这样的十六进制密码是否更容易被破解?
一个字节(八位)有 2^8 种可能的组合。 16 个字节(8*16 位)有 2^(8*16) = 2^128 种可能的组合。
以任何形式(纯二进制、十六进制字符串、十进制、base64 编码二进制等)表示这些组合不能改变可能组合的数量。
如果你用另一种方式来计算它们也没关系。 32位十六进制字符串具有相同的组合数:
32 个字符,每个字符有 16 个变体 = 16^32 = (2^4)^32 = 2^(4*32) = 2^128.
这并不奇怪,因为存在从 16 字节到 32 字符十六进制字符串的一对一转换,反之亦然。