简体   繁体   English

加扰ASCII字符并将其写入文件(Java)

[英]Scrambling ASCII characters and writing them to a file (Java)

My assignment is to get a message, do a substitution cipher on it using keys (created from all ASCII characters and also written to a file), and write the encrypted message to a file. 我的任务是获取一条消息,使用密钥(从所有ASCII字符创建并也写入文件)对它进行替换加密,然后将加密后的消息写入文件。

My question has to do with scrambling the ASCII characters to create an encryption key. 我的问题与加扰ASCII字符以创建加密密钥有关。 I write all ASCII characters in order to a file to create a decryption key, scramble those characters, and then write to another file for an encryption key. 我将所有ASCII字符写入一个文件中,以创建一个解密密钥,对这些字符进行加扰,然后再写入另一个文件中作为加密密钥。 The decryption key (all ASCII characters in order) works completely fine and prints the way I want it to but the encryption key (scrambled ASCII characters) prints unreadable symbols. 解密密钥(按顺序排列的所有ASCII字符)都可以正常工作,并按照我希望的方式打印,但是加密密钥(加扰的ASCII字符)则打印不可读的符号。 Any ideas what I am doing wrong here? 有什么想法我在这里做错了吗?

public void substitutionKeys(String encryptKeyFileName, String decryptKeyFileName) throws IOException
{
    //Create array of 256 characters
    char [] asciiTable = new char[256]; 

    //Fill array with all 256 ASCII characters
    for (int i = 0; i < asciiTable.length; i++){
        asciiTable[i] = (char) i;
    }

    BufferedWriter decryptWriter = new BufferedWriter(new FileWriter(decryptKeyFileName));

    //Write ordered ASCII characters to decryptKeyFile
    decryptWriter.write(asciiTable);
    decryptWriter.close();

    BufferedWriter encryptWriter = new BufferedWriter(new FileWriter(encryptKeyFileName));

    //Write scrambled ASCII characters to encryptKeyFile
    encryptWriter.write(shuffle(asciiTable));
    encryptWriter.close();
}

public char[] shuffle(char[] array)
{
    int index;
    char temp;

    Random random = new Random();
    for (int i = 0; i < array.length; i++){
        index = random.nextInt(i + 1);
        temp = array[index];
        array[index] = array[i];
        array[i] = temp;
    }

    return array;
}

So the program works but the key contains "unreadable" characters? 因此,该程序可以运行,但是键包含“不可读”字符? Sounds like you're creating special/unsupported characters. 听起来您正在创建特殊/不受支持的字符。 When converting integers to characters anything out of the range of 33-160 isn't a normal character (Alphabetic/Numeric). 将整数转换为字符时,超出33-160范围的任何字符都不是正常字符(字母/数字)。

To demonstrate this I wrote a small loop converting ints to characters. 为了证明这一点,我写了一个小循环将整数转换为字符。

System.out.println("START");
for (int i = 0; i < 200; i++) {
        System.out.println("\tChar[" + i + "] = " + (char) i);
}
System.out.println("END");

This was the output: 这是输出:

START
// Nothing at/below 32 prints successfully and can be copied. Output in console is a square
    Char[33] = !
    Char[34] = "
    Char[35] = #
    Char[36] = $
    Char[37] = %
    Char[38] = &
    Char[39] = '
    Char[40] = (
    Char[41] = )
    Char[42] = *
    Char[43] = +
    Char[44] = ,
    Char[45] = -
    Char[46] = .
    Char[47] = /
    Char[48] = 0
    Char[49] = 1
    Char[50] = 2
    Char[51] = 3
    Char[52] = 4
    Char[53] = 5
    Char[54] = 6
    Char[55] = 7
    Char[56] = 8
    Char[57] = 9
    Char[58] = :
    Char[59] = ;
    Char[60] = <
    Char[61] = =
    Char[62] = >
    Char[63] = ?
    Char[64] = @
    Char[65] = A
    Char[66] = B
    Char[67] = C
    Char[68] = D
    Char[69] = E
    Char[70] = F
    Char[71] = G
    Char[72] = H
    Char[73] = I
    Char[74] = J
    Char[75] = K
    Char[76] = L
    Char[77] = M
    Char[78] = N
    Char[79] = O
    Char[80] = P
    Char[81] = Q
    Char[82] = R
    Char[83] = S
    Char[84] = T
    Char[85] = U
    Char[86] = V
    Char[87] = W
    Char[88] = X
    Char[89] = Y
    Char[90] = Z
    Char[91] = [
    Char[92] = \
    Char[93] = ]
    Char[94] = ^
    Char[95] = _
    Char[96] = `
    Char[97] = a
    Char[98] = b
    Char[99] = c
    Char[100] = d
    Char[101] = e
    Char[102] = f
    Char[103] = g
    Char[104] = h
    Char[105] = i
    Char[106] = j
    Char[107] = k
    Char[108] = l
    Char[109] = m
    Char[110] = n
    Char[111] = o
    Char[112] = p
    Char[113] = q
    Char[114] = r
    Char[115] = s
    Char[116] = t
    Char[117] = u
    Char[118] = v
    Char[119] = w
    Char[120] = x
    Char[121] = y
    Char[122] = z
    Char[123] = {
    Char[124] = |
    Char[125] = }
    Char[126] = ~
    Char[127] = 
    Char[128] = ?
    Char[129] = ?
    Char[130] = ?
    Char[131] = ?
    Char[132] = ?
    Char[133] = ?
    Char[134] = ?
    Char[135] = ?
    Char[136] = ?
    Char[137] = ?
    Char[138] = ?
    Char[139] = ?
    Char[140] = ?
    Char[141] = ?
    Char[142] = ?
    Char[143] = ?
    Char[144] = ?
    Char[145] = ?
    Char[146] = ?
    Char[147] = ?
    Char[148] = ?
    Char[149] = ?
    Char[150] = ?
    Char[151] = ?
    Char[152] = ?
    Char[153] = ?
    Char[154] = ?
    Char[155] = ?
    Char[156] = ?
    Char[157] = ?
    Char[158] = ?
    Char[159] = ?
    Char[160] =  
    Char[161] = ¡
    Char[162] = ¢
    Char[163] = £
    Char[164] = ¤
    Char[165] = ¥
    Char[166] = ¦
    Char[167] = §
    Char[168] = ¨
    Char[169] = ©
    Char[170] = ª
    Char[171] = «
    Char[172] = ¬
    Char[173] = ­
    Char[174] = ®
    Char[175] = ¯
    Char[176] = °
    Char[177] = ±
    Char[178] = ²
    Char[179] = ³
    Char[180] = ´
    Char[181] = µ
    Char[182] = ¶
    Char[183] = ·
    Char[184] = ¸
    Char[185] = ¹
    Char[186] = º
    Char[187] = »
    Char[188] = ¼
    Char[189] = ½
    Char[190] = ¾
    Char[191] = ¿
    Char[192] = À
    Char[193] = Á
    Char[194] = Â
    Char[195] = Ã
    Char[196] = Ä
    Char[197] = Å
    Char[198] = Æ
    Char[199] = Ç
END

Note how 128-159 printed "?", 161-199 were special characters, and that 0-32 didn't print anything at all (or at least printed squares). 请注意,128-159打印的“?”,161-199是特殊字符,而0-32根本不打印任何内容(或至少不打印正方形)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM