【发布时间】:2023-03-21 15:17:02
【问题描述】:
我正在用 Java 编写一个 Stream Cipher 程序,它应该从 shell 中获取三个参数:一个带密钥的文件、一个用于输入的文件和一个用于输出的文件。然后,该密钥应用作种子,该种子应生成一个伪随机数,该伪随机数应与输入文件中的明文“异或:ed”。
我已经设法编写了用于读取文件的代码,但我不知道我应该如何编写将密钥作为种子的代码,从而生成一个伪随机数,如上所述。有人可以帮我吗?
public static void main(String[] args) throws IOException {
File key = null;
File input = null;
File output = null;
if (0 < args.length) {
key = new File(args[0])
input = new File(args[1]);
output = new File(args[2]);
}
//more stuff
//a function that takes the seed from the key file and should generate a pseudo-random number
int prng (long seed) {
Random random = new Random ();
int bound = 256;
int number = random.nextInt(bound);
return number;
}
【问题讨论】:
-
我在那里看不到流密码。您可以在 CTR 模式下使用 AES 或使用 ChaCha20
-
如果这是一个学习练习,那么您可以尝试编码RC4,这是一种流密码,但比 AES 更容易为自己编写。对于练习,RC4 很好,但它现在已经过时并且不再安全。它确实可以很好地了解流密码的工作原理。
-
@rossum 谢谢你的回答,但是我不能在这个练习中使用 RC4 或 AES,我必须使用库 java.util.Random。如何从用户输入中获取种子来生成随机数流?
标签: java random cryptography encryption-symmetric stream-cipher