一次性,加密和解密 [英] One time pad, encryption and decryption

查看:137
本文介绍了一次性,加密和解密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我正在尝试使用crytography并尝试这个练习



编写一个程序(最好是Java)生成一个一次性pad,相对大文件的所有
随机数据(比方说1 MB)。程序还应该能够基于
生成的一次性填充来加密/解密文件。



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



纯文字(ASCII):每个云都有一个白衬线

OTP(HEX):6dc72fc595e35dcd38c05dca2a0d2dbd8e2df20b129b2cfa29ad17972922a2

(HEX):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())));
}


}

解决方案

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

  //将秘密文本转换为字节数组
final byte [] secret =secret.getBytes()

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

//生成随机密钥(必须交换)
final byte [] key = new byte [secret.length];
new SecureRandom()。nextBytes(key);

//加密
for(int i = 0; i encoded [i] =(byte) key [i]);
}

//解密
for(int i = 0; i decoded [i] = encoding [i] ^ key [i]);
}

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

我最好的,



Maciek


Hi I am trying to pick up crytography and had been trying this exercise

Write a program (preferably Java) to generate a one-time pad, which is a relatively large file of all random data (say 1 MB). The program should also be able to encrypt/decrypt files based on the generated one time pad.

Tip: use the following test vector to check if your program does encryption correctly.

Plaintext (ASCII): Every cloud has a silver lining
OTP (HEX): 6dc72fc595e35dcd38c05dca2a0d2dbd8e2df20b129b2cfa29ad17972922a2
ciphertext (HEX): 28b14ab7ecc33ea157b539ea426c5e9def0d81627eed498809c17ef9404cc5

I have tried to generate a one time pad using random number generator as I need to convert them to HEX form. and I am pretty sure I am confused or not tackling it the right way

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())));
    }


}

Above would be my one time pad, and I was wondering how any idea how I could implement the encryption using the one time pad and decrypting it.

解决方案

Here you have a full working example:

    // 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));

My best,

Maciek

这篇关于一次性,加密和解密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆