<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 中的安全隨機數生成 > 原文: [https://howtodoinjava.com/java8/secure-random-number-generation/](https://howtodoinjava.com/java8/secure-random-number-generation/) 如果您已經開發軟件已有一段時間,那么您就會知道如何使用 Java 的`SecureRandom`類甚至甚至安全地生成隨機數。 不幸的是,生成*安全隨機數*并不像簡單地使用`SecureRandom`那樣容易。 在此 Java 示例中,我們組裝了一個簡單的清單,以幫助您在應用程序中使用安全隨機數時獲得成功。 > 閱讀更多:[用 Java](https://howtodoinjava.com/security/how-to-generate-secure-password-hash-md5-sha-pbkdf2-bcrypt-examples/) 生成安全哈希 ## 1\. 如何生成安全的隨機數 通常,隨機數的生成取決于熵(隨機性)的來源,例如信號,設備或硬件輸入。 在 Java 中,`java.security.SecureRandom`類被廣泛用于生成密碼強的隨機數。 確定性隨機數已成為許多軟件安全漏洞的根源。 這個想法是,給定幾個隨機數樣本,對手(黑客)應該無法確定原始種子。 如果違反了此限制,則對手可能會成功預測所有將來的隨機數。 ```java import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.SecureRandom; public class Main { public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchProviderException { SecureRandom secureRandomGenerator = SecureRandom.getInstance("SHA1PRNG", "SUN"); // Get 128 random bytes byte[] randomBytes = new byte[128]; secureRandomGenerator.nextBytes(randomBytes); //Get random integer int r = secureRandomGenerator.nextInt(); //Get random integer in range int randInRange = secureRandomGenerator.nextInt(999999); } } ``` ## 2\. 安全隨機數 - 最佳做法 #### 2.1 確定性能標準和工作負載平衡 如果性能是首要考慮因素,請使用`SHA1PRNG`,它是`/dev/urandom`的種子。`SHA1PRNG`可以比`NativePRNG`快 17 倍,但播種選項是固定的。 使用`NativePRNG`進行播種更加靈活,但是如果服務器上的熵不夠大(因為它從`/dev/random`讀取),它將阻止。 如果您不知道從哪里開始,請從`SHA1PRNG`開始。 #### 2.2 不接受默認值; 指定 PRNG 和要使用的供應器 像這樣指定您的條件: ```java SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "SUN"); ``` 以下是有關受支持的 PRNG 和供應器的其他信息。 以下是 SUN 供應器的 PRNG 列表: * **`SHA1PRNG`**(目前,初始播種是通過系統屬性和`java.security`熵收集設備的組合完成的) * **`NativePRNG`**(`nextBytes()`使用`/dev/urandom`,`generateSeed()`使用`/dev/random`) * **`NativePRNGBlocking`**(`nextBytes()`和`generateSeed()`使用`/dev/random`) * **`NativePRNGNonBlocking`**(`nextBytes()`和`generateSeed()`使用`/dev/urandom`) * **`NativePRNGBlocking`**和**`NativePRNGNonBlocking`**在 JRE 8+ 中可用。 有關其他供應器的信息,請參見 [Java 密碼架構 JDK 8 的 Oracle 供應器文檔](https://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html)。 Oracle 還提供了按 OS 平臺描述供應器的文檔。 #### 2.3 提供更多機會增加熵 定期創建`SecureRandom`的新實例并重新設定種子,如下所示: ```java SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "SUN"); sr.setSeed(SecureRandom.generateSeed(int)) ``` 如果種子泄漏,定期重新播種可防止數據泄露。 如果使用`SHA1PRNG`,則始終在創建 PRNG 的新實例后立即調用`java.security.SecureRandom.nextBytes(byte[])`。 #### 2.4 降低可預測性 如果為`egdSource`,`java.security`文件中的配置參數或`java.security.egd`系統屬性分配了可預測的文件/ URL,則`SecureRandom`可以變為可預測的。 #### 2.5 舊版 Java 的補丁 低于 1.4.2 的 JRE 版本在生成`SHA1PRNG`安全種子方面存在已知問題。 再說一次,如果您使用的 Java 版本如此之舊,則存在更大的安全隱患。 Java 的舊版本非常不安全,因此更新補丁程序非常重要。 確保客戶安全的最佳方法之一是針對可能出現的最新 [Oracle 重要補丁更新](https://www.oracle.com/technetwork/topics/security/alerts-086861.html)快速認證您的軟件。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看