使用Java SecureRandom进行加密以实现加密目的?

时间:2013-01-17 18:37:12

标签: java random cryptography shuffle

我有一个整数列表,其中的顺序是必不可少的。列表可能非常大,最多2 ^ 24个元素。我希望以一种原始值和它们的频率保持相同的方式对其进行“加密”;基本上,洗牌清单。我发现一种非常简单(但非常不安全!)的方法是使用PRNG,如Java.Random。该程序将使用发送者和接收者共享的密钥为PRNG播种,然后应用任何随机排序算法(例如Fisher-Yates)。这样,知道密钥的接收器就能够“恢复”改组。

我知道这是非常糟糕的想法,但使用SecureRandom实际上会变得更好吗?我知道它的使用适用于加密的东西,但我不认为它用于输出大型数字列表。

(总的来说,我知道“从不做你自己的算法”是加密101,但到目前为止我还没有找到任何其他具有我想要的属性的算法,只是“重新排序”但保留了值和频率如果存在这样的事情,你能指点我吗?)

谢谢! :)

1 个答案:

答案 0 :(得分:1)

您的想法很好,您只需要使用安全的伪随机流。最简单的创建方法是流密码,例如点亮率模式下的AES。

实现一个函数int Random(int count),它从流中读取8个字节,取整数模数,并将其用作Fisher-Yates shuffle中的构建块。这不是完全统一的,但足够接近在实践中无关紧要。如果偏执,则将其增加到16个字节而不是8个。