我正在使用带固定种子的RNG。根据输入,这是一个任意的整数序列,我想影响输出。像这样:
foreach (int i in source_int_sequence) {
write_output (RNG.nextDouble());
RNG.feed (i);
}
反馈函数应以可重复的方式影响下一个输出(相同的输入创建相同的输出)但难以预测(即随机)。
RNG不被认为是加密安全的,自然受影响的结果也不一定如此。但是请注意,源序列可能看起来很奇怪,即只有零,+1和-1交替,稳定增加数字,或者你能想到的其他任何东西都会抛弃一个天真的实现。
我正在使用C#,但我相信这个问题与语言无关。
答案 0 :(得分:1)
解决这个问题的一种方法是将输入的整数序列转换为一系列看似随机的值。完成后,您可以影响通过伪随机生成器生成随机数生成的随机数,然后使用您正在返回的随机数序列对它们进行异或。
将输入序列转换为随机序列的一种可能方法是在块密码上使用cipher-block chaining或counter mode之类的技术。如果你使用的分组密码是安全的,那么这会给你一些加密安全的东西(但是,正如你所提到的,这是过度杀伤)。另一种选择是使用具有无界窗口大小的rolling hash function来构建流中的哈希值。
希望这有帮助!