在 Java 中產生隨機十六進位值
一、簡介
應用程式中的隨機十六進位值可以用作用於各種目的的唯一標識符,例如資料庫條目、會話令牌或遊戲機制。它們還可以為加密安全和測試過程做出貢獻。
在本快速教程中,我們將了解在 Java 中產生隨機十六進位值的不同方法。
2.使用java.util.Random
java.util
中的Random
類別提供了一種產生隨機Integer
和Long
值的簡單方法。我們可以將它們轉換為十六進制值。
2.1.產生無界十六進制值
讓我們先產生一個無界整數,然後使用toHexString()
方法將其轉換為十六進位字串:
String generateUnboundedRandomHexUsingRandomNextInt() {
Random random = new Random();
int randomInt = random.nextInt();
return Integer.toHexString(randomInt);
}
如果我們的應用程式需要更大的十六進位值,我們可以使用Random
類別中的nextLong()
方法來產生隨機Long
值。然後可以使用其toHexString()
方法將該值轉換為十六進位字串:
String generateUnboundedRandomHexUsingRandomNextLong() {
Random random = new Random();
long randomLong = random.nextLong();
return Long.toHexString(randomLong);
}
我們也可以使用String.format()
方法將其轉換為十六進位String
。此方法允許我們使用佔位符和格式說明符建立格式化字串:
String generateRandomHexWithStringFormatter() {
Random random = new Random();
int randomInt = random.nextInt();
return String.format("%02x", randomInt);
}
2.2.產生有界十六進位值
我們可以使用Random
類別中帶有參數的nextInt()
方法來產生有界隨機Integer
,然後將其轉換為十六進位String
:
String generateRandomHexUsingRandomNextIntWithInRange(int lower, int upper) {
Random random = new Random();
int randomInt = random.nextInt(upper - lower) + lower;
return Integer.toHexString(randomInt);
}
3.使用java.security.SecureRandom
對於需要加密安全隨機數的應用程序,我們應該考慮使用SecureRandom
類別。 SecureRandom
類別繼承自java.util.Random
類,因此我們可以使用nextInt()
方法來產生有界和無界整數。
3.1.產生無限制的安全十六進位值
讓我們使用nextInt()
方法產生一個隨機整數並將其轉換為十六進位值:
String generateRandomHexUsingSecureRandomNextInt() {
SecureRandom secureRandom = new SecureRandom();
int randomInt = secureRandom.nextInt();
return Integer.toHexString(randomInt);
}
我們也可以使用nextLong()
方法產生隨機Long值並將其轉換為十六進位值:
String generateRandomHexUsingSecureRandomNextLong() {
SecureRandom secureRandom = new SecureRandom();
long randomLong = secureRandom.nextLong();
return Long.toHexString(randomLong);
}
3.2.產生有界安全十六進位值
讓我們產生一個範圍內的隨機整數並將其轉換為十六進位值:
String generateRandomHexUsingSecureRandomNextIntWithInRange(int lower, int upper) {
SecureRandom secureRandom = new SecureRandom();
int randomInt = secureRandom.nextInt(upper - lower) + lower;
return Integer.toHexString(randomInt);
}
4. 使用 Apache commons-math3
Apache commons-math3
提供了一個實用程式類別RandomDataGenerator
,它提供了更多選項來產生隨機值。此類提供了幾種產生隨機資料的實用方法。
要使用它,我們首先添加依賴項:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
可以在此處檢查最新版本的依賴項。
4.1.產生有界隨機十六進位值
我們可以使用RandomDataGenerator
類別中的nextInt()
方法來產生隨機整數。此方法類似於Random
和SecureRandom
類,但提供了額外的靈活性和功能:
String generateRandomHexWithCommonsMathRandomDataGeneratorNextIntWithRange(int lower, int upper) {
RandomDataGenerator randomDataGenerator = new RandomDataGenerator();
int randomInt = randomDataGenerator.nextInt(lower, upper);
return Integer.toHexString(randomInt);
}
4.2.產生安全有界隨機十六進位值
我們還可以為加密安全應用程式產生一個安全Integer
,並將其轉換為十六進位字串以獲得安全隨機十六進位值:
String generateRandomHexWithCommonsMathRandomDataGeneratorSecureNextIntWithRange(int lower, int upper) {
RandomDataGenerator randomDataGenerator = new RandomDataGenerator();
int randomInt = randomDataGenerator.nextSecureInt(lower, upper);
return Integer.toHexString(randomInt);
}
4.3.產生給定長度的隨機十六進位字串
我們可以使用RandomDataGenerator
類別產生給定長度的隨機十六進位字串:
String generateRandomHexWithCommonsMathRandomDataGenerator(int len) {
RandomDataGenerator randomDataGenerator = new RandomDataGenerator();
return randomDataGenerator.nextHexString(len);
}
此方法透過直接產生所需長度的十六進位字串來簡化過程。使用nextHex()
比產生整數並轉換它們更直接,提供了一種獲取隨機十六進位String
直接方法。
4.4.產生給定長度的安全隨機十六進位字串
對於安全敏感的應用程序,我們還可以使用nextSecureHexString()
方法產生安全的十六進位字串:
String generateSecureRandomHexWithCommonsMathRandomDataGenerator(int len) {
RandomDataGenerator randomDataGenerator = new RandomDataGenerator();
return randomDataGenerator.nextSecureHexString(len);
}
此方法使用安全隨機數產生器來產生十六進位String
,使其非常適合安全性至關重要的應用程式。
5. 結論
在本文中,我們學習了幾種產生隨機十六進位值的方法。透過利用這些方法,我們可以確保我們的應用程式產生適合我們特定需求的穩健且可靠的隨機十六進位值。
本文的完整原始碼可在 GitHub 上取得。