Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编码一种密码算法,它接受来自未指定源的随机位_C++_Templates_Random - Fatal编程技术网

C++ 编码一种密码算法,它接受来自未指定源的随机位

C++ 编码一种密码算法,它接受来自未指定源的随机位,c++,templates,random,C++,Templates,Random,我目前正在编写一个加密算法,我想在GitHub上共享它。该算法接受随机位作为输入。我知道伪随机比特有很多可能的来源,最奇怪的是你可以买到它们。由于伪随机数生成器的质量和来源可能会有很大差异,我希望用户能够生成自己的伪随机位作为算法的输入。我不知道如何以一种通用的方式编写我的算法,因为我不知道在专业的晶体或统计项目中伪随机数来自什么数据结构,也不知道如何编写模板函数以最通用的方式访问这些伪随机数 伪随机数生成器将通过我的函数my_distribution访问。我假设PRNG将返回一个介于0和1之间

我目前正在编写一个加密算法,我想在GitHub上共享它。该算法接受随机位作为输入。我知道伪随机比特有很多可能的来源,最奇怪的是你可以买到它们。由于伪随机数生成器的质量和来源可能会有很大差异,我希望用户能够生成自己的伪随机位作为算法的输入。我不知道如何以一种通用的方式编写我的算法,因为我不知道在专业的晶体或统计项目中伪随机数来自什么数据结构,也不知道如何编写模板函数以最通用的方式访问这些伪随机数

伪随机数生成器将通过我的函数my_distribution访问。我假设PRNG将返回一个介于0和1之间的double,或者返回一个可以转换为介于0和1之间的double的数据类型

double my_distribution([pseudorandom number generator]) {
    double random_number_from_my_distribution;
    // compute random_number_from_my_distribution using the PRNG
    return random_number_from_my_distribution;
}
我能想到的伪随机比特有几个可能的来源

  • 伪随机位可以存储在运行时打开的文件中
  • 伪随机比特可以由(非io)流提供
  • 伪随机位可以是函数的返回值
  • 伪随机比特可以存储在其他数据结构中

  • 我应该如何将伪随机位接受到我的_分布中?为什么?

    你可以在C++中传递一个函数作为参数。将随机生成器函数作为算法的参数。这不仅允许插入任何生成器,还使单元测试变得微不足道:

    #include <functional>
    
    // The first generator
    int generate_random() {
      return rand();
    }
    
    // The second generator good for tests
    int generate_predictable_random() {
      return 17;
    }
    
    // Cryptography algorithm that uses the passed random generator.
    void work_with_random(std::function<int()> random_generator) {
      int random_data = random_generator();
      printf("My random: %d\n", random_data);
    }
    
    int main() {
      work_with_random(generate_random);
      work_with_random(generate_predictable_random);
    }
    
    #包括
    //第一台发电机
    int生成_随机(){
    返回rand();
    }
    //第二台发电机用于测试
    int生成\u可预测\u随机(){
    返回17;
    }
    //使用传递的随机生成器的加密算法。
    带随机的无效工作(标准::函数随机发生器){
    int random_data=随机_生成器();
    printf(“我的随机:%d\n”,随机数据);
    }
    int main(){
    与随机工作(生成随机);
    与随机工作(生成随机);
    }
    
    请参见。@JohnKugelman链接中的统一随机位发生器概念回答了这个问题,谢谢。在…专业加密或统计项目中…,PRN肯定不是来自John引用的参考文献中提到的引擎。您需要另一类称为的PRNG。我建议使用或进行更简单的使用。