Javaでランダム識別子を生成したいと思います。識別子は固定サイズにする必要があり、同じ識別子を 2 回生成する確率は非常に低くする必要があります (システムには約 500 000 人のユーザーがいます)。識別子は、ブルート フォース攻撃によって「推測」することが不可能なほど長くする必要があります。
これまでの私のアプローチは、次のようなものです。
String alphabet = "0123456789ABCDE....and so on";
int lengthOfAlphabet = 42;
long length = 12;
public String generateIdentifier(){
String identifier = "";
Random random = new Random();
for(int i = 0;i<length;i++){
identifier+= alphabet.charAt(random.nextInt(lengthOfAlphabet));
}
return identifier;
}
データベースの制約によって一意性を強制しています。既に作成されている識別子にヒットした場合は、使用されていない識別子が見つかるまで生成を続けます。
私の仮定は、lenghtOfAlpahbet と長さを微調整して、探しているプロパティを取得できるということです。
- まれな衝突
- 力ずくで実行不可能
- システムのユーザーが入力する必要があるため、識別子はできるだけ短くする必要があります。
これは良いアプローチですか?「長さ」の価値について考えている人はいますか?