gpt4 book ai didi

java - 一次一密,加密解密

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:27 24 4
gpt4 key购买 nike

我正在尝试学习密码学并且一直在尝试这个练习

写一个程序(最好是Java)生成一次一密,这是一个比较大的文件随机数据(例如 1 MB)。该程序还应该能够根据生成一个时间垫。

提示:使用以下测试 vector 来检查您的程序是否正确加密。

纯文本 (ASCII):每朵云都有一线希望
一次性密码(十六进制):6dc72fc595e35dcd38c05dca2a0d2dbd8e2df20b129b2cfa29ad17972922a2
密文(十六进制):28b14ab7ecc33ea157b539ea426c5e9def0d81627eed498809c17ef9404cc5

我曾尝试使用随机数生成器生成一次性密码本,因为我需要将它们转换为十六进制形式。我很确定我很困惑或者没有以正确的方式解决它

public static void oneTimePad()
{
Random ran = new Random();
String s = "0123456789ABCDEF";
for(int i = 0; i < 100; i++)
{
System.out.print(s.charAt(ran.nextInt(s.length())));
}
}

上面是我的一次一密本,我想知道如何使用一次一密本实现加密并解密它。

最佳答案

这里有一个完整的工作示例:

    // convert secret text to byte array
final byte[] secret = "secret".getBytes()

final byte[] encoded = new byte[secret.length];
final byte[] decoded = new byte[secret.length];

// Generate random key (has to be exchanged)
final byte[] key = new byte[secret.length];
new SecureRandom().nextBytes(key);

// Encrypt
for (int i = 0; i < secret.length; i++) {
encoded[i] = (byte) (secret[i] ^ key[i]);
}

// Decrypt
for (int i = 0; i < encoded.length; i++) {
decoded[i] = (byte) (encoded[i] ^ key[i]);
}

assertTrue(Arrays.equals(secret, decoded));

关于java - 一次一密,加密解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13187652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com