如何在Java

时间:2016-01-02 19:20:28

标签: java encryption random

希望为替换密码创建随机生成的字母表。我的想法是这样的。

        char randomChar = (char) (97 + r.nextInt(25));

然而,这将导致重复的字母。通过char数组并查看字母是否已经存在似乎效率低下。

编辑:我的请求过于模糊,现在看到了。这是我想要解决的完整问题。字母表还必须包含空格按钮字符,例如''。

  

编写一个Java程序,使用替换密码(将纯文本字母随机分配给密文字母)将纯文本转换为密文(用户输入的)。请注意,Substitution Cipher用密文替换明文。最常见的替换密码用预定义的单个字符密码替换明文的单个字符(例如,纯文本字符“a”可能被密文字符'q'替换,'b'可能被'x'替换, 'c'由'k'等等)。每个纯文本字符应替换为不同的密文字符。   作为解决方案的一部分,您必须至少编写和使用以下函数/方法:   (i)createCipher(),它确定并返回从纯文本到密文的映射。每个纯文本字符('a'..'z','')必须随机分配一个密文字符;

3 个答案:

答案 0 :(得分:0)

我想到了一个解决方案,说解决方案有效,但是它有效吗?

    public static char[] createCipher(char[] cipher) {
    char[] cipher = new char[27];
    int characterNumber = 97;
    cipher[0] = ' ';
    for(int counter = 1; counter < cipher.length;counter++)
    {
        char character = (char) characterNumber;
        cipher[counter] = character;
        characterNumber++;  
    }

    for(int counter = 0; counter < cipher.length;counter++)
    {
        int randomLocation = (int) (Math.random()*26);
        char temporaryCharacter = cipher[randomLocation];
        cipher[randomLocation] = cipher[counter];
        cipher[counter] = temporaryCharacter;
    }
    return cipher;

}

答案 1 :(得分:0)

要对字母表进行重新排列(26个字符,但顺序不同),

boolean[] b=new boolean[26];
  for(i=0; i<b.length; i++) b[i]=false;
 for(int counter = 0; counter < 26;counter++)
{
    int randomLocation = (int) (Math.random()*26);
    while(b[randomLocation]) randomLocation = (int) (Math.random()*26);
    b[randomLocation]=true;
    cipher[counter]=alphabet[randomLocation];
}  

忘记&#34;高效&#34;首先你要解决问题

答案 2 :(得分:0)

如果要重新排列字母表,可以使用Collections.shuffle(..)元数据。有人这样想:

public static void main(String[] args) {
    char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
    char[] randomAlphabet = new char[alphabet.length];

    // Copy to a List
    List<Character> list = new ArrayList<Character>();
    for (char c : alphabet) {
        list.add(c);
    }

    // shuffle it       
    Collections.shuffle(list);

    // Copy it back to an array
    for (int i = 0; i < list.size(); i++) {
        randomAlphabet[i] = list.get(i);
    }

    System.out.print("Random alphabet: ");
    for (int i = 0; i < randomAlphabet.length; i++) {
        System.out.print(" " + randomAlphabet[i]);
    }
}

当我运行时,这就是这个:

Random alphabet:  j b w q o c r f z k g n p a u s i d m y h v e l x t