<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                根據物理學基本原理,一個系統的熵越大,該系統就越不穩定。在Android中,目前也只有隨機數喜歡處于這種不穩定的系統中了。 SystemServer中添加該服務的代碼如下: ~~~ ServiceManager.addService("entropy", newEntropyService()); ~~~ 上邊代碼非常簡單,從中可直接分析EntropyService的構造函數: **EntropyService.java** ~~~ public EntropyService() { //調用另外一個構造函數,getSystemDir函數返回的是/data/system目錄 this(getSystemDir() + "/entropy.dat","/dev/urandom"); } public EntropyService(String entropyFile, StringrandomDevice) { this.randomDevice= randomDevice;//urandom是Linux系統中產生隨機數的設備 // /data/system/entropy.dat文件保存了系統此前的熵信息 this.entropyFile = entropyFile; //下面有4個關鍵函數 loadInitialEntropy();//① addDeviceSpecificEntropy();//② writeEntropy();//③ scheduleEntropyWriter();//④ } ~~~ 從以上代碼中可以看出,EntropyService構造函數中依次調用了4個關鍵函數,這4個函數比較簡單,這里只介紹它們的作用。感興趣的讀者可自行分析其代碼。 - loadInitialEntropy函數:將entropy.dat文件的中內容寫到urandom設備,這樣可增加系統的隨機性。根據代碼中的注釋,系統中有一個entropypool。在系統剛啟動時,該pool中的內容為空,導致早期生成的隨機數變得可預測。通過將entropy.dat數據寫到該entropy pool(這樣該pool中的內容就不為空)中,隨機數的生成就無規律可言了。 - addDeviceSpecificEntropy函數:將一些和設備相關的信息寫入urandom設備。這些信息如下: ~~~ out.println("Copyright (C) 2009 The AndroidOpen Source Project"); out.println("All Your Randomness Are BelongTo Us"); out.println(START_TIME); out.println(START_NANOTIME); out.println(SystemProperties.get("ro.serialno")); out.println(SystemProperties.get("ro.bootmode")); out.println(SystemProperties.get("ro.baseband")); out.println(SystemProperties.get("ro.carrier")); out.println(SystemProperties.get("ro.bootloader")); out.println(SystemProperties.get("ro.hardware")); out.println(SystemProperties.get("ro.revision")); out.println(new Object().hashCode()); out.println(System.currentTimeMillis()); out.println(System.nanoTime()); ~~~ 該函數的注釋表明,即使向urandom的entropy pool中寫入固定信息,也能增加隨機數生成的隨機性。從熵的角度考慮,系統的質量越大(即pool中的內容越多),該系統越不穩定。 - writeEntropy函數:讀取urandom設備的內容到entropy.dat文件。 - scheduleEntropyWriter函數:向EntropyService內部的Handler發送一個ENTROPY_WHAT消息。該消息每3小時發送一次。收到該消息后,EntropyService會再次調用writeEntropy函數,將urandom設備的內容寫到entropy.dat中。 通過上面的分析可知,entropy.dat文件保存了urandom設備內容的快照(每三小時更新一次)。當系統重新啟動時,EntropyService又利用這個文件來增加系統的熵,通過這種方式使隨機數的生成更加不可預測。 >[warning]**注意**: EntropyService本身的代碼很簡單,但是為了盡量保證隨機數的隨機性,Android還是下了一番苦功的。
                  <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>

                              哎呀哎呀视频在线观看