boost.png (6897 bytes)頭文件 <boost/nondet_random.hpp>

頭文件 <boost/nondet_random.hpp> 概覽

namespace boost {
  class random_device;
} // namespace boost

random_device

概覽

class random_device : noncopyable
{
public:
  typedef unsigned int result_type;
  static const bool has_fixed_range = true;
  static const result_type min_value = /* implementation defined */;
  static const result_type max_value = /* implementation defined */;
  result_type min() const;
  result_type max() const;
  explicit random_device(const std::string& token = default_token);
  ~random_device();
  double entropy() const;
  unsigned int operator()();
};

描述

random_device 類是 不確定隨機數生成器 的模型。它使用一個或多個由實現確定的隨機過程來產生均勻分佈的不確定隨機數。若環境沒有提供實現不確定隨機數生成器的條件,就不應該實現 random_device 。參看

"Randomness Recommendations for Security", D. Eastlake, S. Crocker, J. Schiller, Network Working Group, RFC 1750, December 1994

注意:某些操作系統對計算機硬件的抽像化程度較高,掩蓋了其行為的不確定性,而有的系統為生成不確定隨機數專門提供了設備。只使用標準 C++ 來實現模擬此功能是很困難的,因此在某些平台上此類可能不可用。

成員

explicit random_device(const std::string& token = default_token)
效果:構造一 random_device,其中 token 描述了某種可以用來模擬隨機過程的資源 (如一 URL)。
    double entropy() const
返回:對 operator() 返回的隨機數的熵的估計。返回值的範圍是 min() 到 log2(max()+1)。確定隨機數生成器 (如偽隨機數生成器) 的熵是 0。
拋出:無。

Linux 平台上的實現注記

在 Linux 操作系統上,token 被認為是文件系統的路徑。假設這一路徑表示某一虛擬設備,能提供不確定隨機數的流。此設備不應出現錯誤或者文件尾標記 (end-of-file);否則將拋出 std::ios_base::failure。默認地,random_device 使用虛擬設備 /dev/urandom 來獲取隨機數。另一種做法是使用 /dev/random,後者在熵池 (entropy pool) 沒有隨機位時將會在讀操作時掛起 (譯註:可能類似於輸入流中沒有字符時等待用戶輸入)。

性能

測試程序 nondet_random_speed.cpp 用一個緊湊的循環測試 nondet_random.hpp 中上述算法的實現的運行速度。測試環境:Pentium Pro 200 MHz with gcc 2.95.2, Linux 2.2.13, glibc 2.1.2。

每次調用耗時 [微秒, usec]
random_device 92.0

誤差範圍為 +/- 1 微秒。


Valid HTML 4.01 Transitional

Revised 05 December, 2006

Copyright © 2000-2003 Jens Maurer

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

中文版修訂:2008/7/4

Copyright © 2008 xiaq

在 Boost Software License, Version 1.0 的條款下發佈。(參看文件 LICENSE_1_0.txt 或在線副本 http://www.boost.org/LICENSE_1_0.txt)