所以我知道以下面的方式生成密碼是一個壞主意。我會說它只有少數(可能是5個左右)熵,但我無法正確計算它。以這種方式生成的熵密碼只有多少(或少)
有人可以告訴我,如何計算使用Oracle的JDK 7以下列方式生成的長度爲n的密碼所需的平均嘗試次數?
我假定的相關因素是:
- 字母表尺寸(62 - 5用於限制混亂的前瞻性字符),
- 兩個步驟的過程來選擇的字符類,然後字符,
- 四捨五入到整數,
- 嘗試直到成功取樣字符的方式,
- Math.random()的內在屬性。
但我無法得到確切的數字。
char[] generate(int n) {
char[] pw = new char[n];
for (int i = 0; i < n; i++) {
int c;
while (true) {
c = randomCharacter(c);
if (c == '0' || c == 'O' || c == 'I' || c == '1' || c == 'l')
continue;
else
break;
}
pw[i] = (char) c;
}
return pw;
}
int randomCharacter(int c) {
switch ((int) (Math.random() * 3)) {
case 0:
c = '0' + (int) (Math.random() * 10);
break;
case 1:
c = 'a' + (int) (Math.random() * 26);
break;
case 2:
c = 'A' + (int) (Math.random() * 26);
break;
}
return c;
}
'Math.random'的內在屬性取決於它的實現。你沒有指定一個。你甚至沒有指定這種語言(我猜可能是java)。 – CodesInChaos
好點,我遇到了標籤限制,忘了在其他地方提到它。 –