【发布时间】:2013-01-17 18:37:11
【问题描述】:
我有一个整数列表,其中的顺序是必不可少的。该列表可以非常大,最多 2^24 个元素。我想以原始值及其频率保持不变的方式“加密”它;本质上,就是对列表进行洗牌。我发现一种非常简单(但非常不安全!)的方法是使用 PRNG,如 Java.Random。该过程将使用发送方和接收方共享的密钥为 PRNG 播种,然后应用任何随机排序算法(例如 Fisher-Yates)。这样一来,知道密钥的接收者就能够“恢复”洗牌。
我知道这是一个非常糟糕的想法,但使用 SecureRandom 真的会变得更好吗?我知道它适用于加密的东西,但我不认为它是用来输出大量数字的。
(总的来说,我知道“从不做你自己的算法”是加密 101,但到目前为止,我还没有找到任何其他具有我想要的属性的算法,即“重新排序”但将值和频率保持在原始列表。如果有这样的东西,请您指点一下吗?)
谢谢! :)
【问题讨论】:
-
您要解决的真正问题是什么。它不能像保持发送方和接收方之间的通信安全那么简单,因为您只需加密整个流即可。那么你真正想要达到什么目的。
-
本质上,以可逆的方式“混淆”照片的一部分。有帮助吗?
-
你为什么不简单地加密你想要混淆的照片部分?哦,等等,你想让它们保持“有效”的照片吗?
-
没错!否则会对画面产生非常大的影响,这是我试图避免的。
-
我建议您在 StackOverflow 上关闭此问题并在 crypto.stackexchange.com 上重新发布。对于像这样的开放式设计问题,这将是一个更好的论坛。 StackOverflow 旨在解决特定的编程问题(通常伴随着代码),这些问题具有特定、客观的答案。
标签: java random cryptography shuffle