【Java入門】パスワード決めのヒントになるかも?乱数(random)の作り方
- ツイート
-
- 2018/02/03
最近、オンラインショップ利用者のアカウントが盗まれ、金銭的な被害を受ける事件が発生しています。被害に遭わないようにするためには、推測されにくいパスワードを設定することが欠かせません。Javaで乱数を生成する方法を知っていれば、パスワード決めのヒントになるかもしれません。今回は、乱数の作り方についてご紹介します。
IT業界まるわかりガイドは、日本初Web専門スクールのインターネット・アカデミーが運営する業界情報メディアです。最新の業界情報を、初心者にも分かりやすくご紹介しています。
目次
乱数とは?
規則性を持たず、予測が不可能な数値を乱数(random number)と呼びます。一言でいえば、乱数とは「でたらめな数」です。
乱数は暗号アルゴリズムやゲームのランダム要素、数値計算法の1つであるモンテカルロ法など、さまざまな分野で利用されています。
Javaの場合、MathクラスやRandomクラスに乱数を生成するメソッドが用意されており、これらを呼び出して乱数を生成することが可能です。
ただし、これらのメソッドによって生成される乱数は、「シード(seed:種)」に基づいて生成され、純粋な乱数ではありません。こうした乱数を疑似乱数と呼びます。シードの値が同じだった場合、生成される乱数は同じ数値・文字列の並びとなるため、そのままパスワードに設定することは控えましょう。
乱数の作り方(1)
Mathクラスは指数関数や三角関数といった数値処理のためのメソッドを含んでいますが、そのうちの1つのメソッドrandom()は、0以上1未満の範囲でdouble型の乱数を生成します。 0以上100未満の範囲で乱数が欲しいときは100倍するなど、必要に応じて調整しましょう。
【プログラム例】
public class MathRandom{
public static void main(String[] args){
double num = Math.random(); //乱数を生成
System.out.println(num); //乱数を出力
}
}
乱数の作り方(2)
Mathクラスのrandomメソッドはdouble型の乱数を生成しますが、状況によってはint型の乱数が欲しいときも少なくありません。
このようなときはRandomクラスのnextIntメソッドを使います。
一方、nextInt()は引数に整数値を指定した場合、0以上かつ指定した整数値未満の整数値を返します。引数を指定しない場合は、int型が取りうる範囲で整数値を返します。
【プログラム例】
import java.util.Random; //java.util.Randomのインポート
public class RandomNumber{
public static void main(String[] args) {
Random rand = new Random(); //Randomクラスをインスタンス化
int num = rand.nextInt(100); //0以上100未満の整数値を生成
System.out.println(num); //乱数の出力
}
}
おわりに
乱数はパスワードのセキュリティを高めたり、ゲームに意外性を持たせたりする場面で重要な役割を果たしています。今回は乱数の基本として2つのメソッドを紹介しましたが、実際に乱数を生成させてみると、偏りがあることに気付くでしょう。乱数に興味を持った方は、改善策を考えてみることをおすすめします。
なお、より安全な乱数を生成するメソッドを提供するクラスとして、SecureRandomクラスが用意されています。今回紹介したメソッドとSecureRandomクラスのメソッドで、乱数の精度を比較してみるのも面白いでしょう。
インターネット・アカデミーでは、これからJavaプログラミングを学ぶ方から既にプログラマー・エンジニアとして働いている方まで、それぞれのレベルに合わせた指導が受けられます。「プログラミングを身に付けたい」「ワンランク上を目指したい」という方は、Java講座の受講をおすすめします。