0

このプログラムで vigenere テーブルを使用してテキストを暗号化しましたが、コンパイル時に次の例外が発生します: Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - not a statement at advancednetworks.PolyalphabetCipher.main(PolyalphabetCipher.java: 25) ジャワ 結果: 1

誰かがそれを修正するのを手伝ってくれますか、できるだけ早く

import java.util.*;

public class PolyalphabetCipher {
public static void main(String... s)
{
    //createVigenereTable();
    Scanner sc=new Scanner(System.in);
    String key, text;

    System.out.println("Enter the keyword");
    key=sc.nextLine();
    key=key.toUpperCase();
    System.out.println("Enter text to be encrypted");
    text=sc.nextLine();
    text=text.toLowerCase();
    text=text.replaceAll("\\s+","");
    System.out.println(text);
    encrypt(key,text);      

}
public static int[][] createVigenereTable()
{
    int table[][]=new int[26][26];
    int rem=0, n=26;
    int value;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            value=j+rem;
            if(value>25)
            {
                value=value-26;
            }
            table[i][j]=value+65;
        }
    rem++;
    }

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)

            {
           char b=(char)(table[i][j]);
            System.out.print(b);
            System.out.print(" ");
            }
            System.out.println();
    }
    return table;

  }


//keyword::row and t=plainText::column
public static void encrypt(String k, String t)
{
    int len=k.length();
    char keyword[]=new char[t.length()];
    for(int i=0, j=0;i<t.length();i++)
    {
        keyword[i]=k.charAt(j);
        j++;
        if(j==len)
            j=0;

    }
    char cipherText[]=new char[t.length()];

    int vigenere[][]=new int[26][26];
    vigenere=createVigenereTable();
    System.out.println(vigenere);
    for(int x=0;x<t.length();x++)
    {
        int i=0;
        int j=0;
     for(int y=0;y<26;y++)
     {
         if(keyword[x]==vigenere[0][y])  
                 i=y;
         if(t.charAt(x)==vigenere[y][0])
                 j=y;
     }
      cipherText[x]=(char)(vigenere[j][i]);   
     }
    System.out.println(cipherText);
    }

}
4

2 に答える 2

0

ASCIIテーブルに基づいていない明確なマッピング文字->整数を使用すると、アルゴリズムの実装がはるかに簡単になります。

これは、2 つの変換マップを作成することで実行できます。

toInteger= {a  0, b  1, ...}
toLetter=  {0 a, 1 b, ...}

次に、メッセージとキーを整数リストに変換し、非常に単純な変換を実行してJava modulo operatorを使用し、最後に結果のシーケンスを文字に変換します。

于 2014-02-02T17:28:34.607 に答える
0

vignere 暗号を使用して最終復号文字を暗号化する簡単な方法は、それらの char 値を使用して、暗号化/復号化された char 値を計算することです。

public class VignereTable {

    private static final int ASCII_UPPERCASE_LETTERS_START = 65;
    private static final int ALPHABET_SIZE = 26;

    private VignereTable() {
         //prevent initialization
    }

    public static char cipherChar(char _key, char _letter) {
        return (char) ((_key + _letter) % ALPHABET_SIZE + ASCII_UPPERCASE_LETTERS_START);
    }

    public static char decipherChar(char _key, char _letter) {
        int index = _key - ASCII_UPPERCASE_LETTERS_START;
        if (_letter >= ASCII_UPPERCASE_LETTERS_START + index && _letter <= ASCII_UPPERCASE_LETTERS_START + (index * 2))
            return (char) (_letter - index);
        else if (_letter <= ASCII_UPPERCASE_LETTERS_START + index)
            return (char) (_letter + ALPHABET_SIZE - index);
        else
            return (char) (_letter - (_key - ASCII_UPPERCASE_LETTERS_START));
    }

    public static char[][] asArray() {
        char table[][] = new char[ALPHABET_SIZE][ALPHABET_SIZE];
        for (int i = 0; i < ALPHABET_SIZE; i++) {
            for (int j = 0; j < ALPHABET_SIZE; j++) {
                table[i][j] = (char) ((ASCII_UPPERCASE_LETTERS_START + ((j + i)) % ALPHABET_SIZE));
            }
        }
        return table;
    }

    public static String asString() {
        char[][] vTable = asArray();
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < vTable.length; i++) {
            for (int j = 0; j < vTable.length; j++) {
                builder.append(vTable[i][j]).append(" ");
            }
            builder.append("\n");
        }
        return builder.toString();
    }
}
于 2017-10-15T23:05:52.740 に答える