Encript和加载文件

时间:2016-04-22 05:38:50

标签: java load bytecode caesar-cipher

拜托,帮我找个错误。 我有一个类文件。我拿了这个类的字节代码并用Caesar cipher对它进行加密。我有几个命令提示符的参数:

  1. 类文件:我们加密,
  2. 类文件:输出将传输
  3. key:我们添加到每个字节码数的数字 第一个论点。
  4. 我想简单地用零键加密第一个参数,输出将传输到第二个参数,然后我想运行第二个文件(第二个参数)。

    我编译:

    javac Caesar.java
    

    执行命令

    java Caesar HelloWorld.class Hello1.class 0
    

    (注意 - 我使用零键,因此,不应更改文件)

    运行第二个文件,我看到了这样的错误:

      

    julia @ julia-Aspire-5680~ / zagruzchik $ java Hello1 Exception in   thread“main”java.lang.NoClassDefFoundError:Hello1(错误的名字:   HelloWorld)at java.lang.ClassLoader.defineClass1(Native Method)             在java.lang.ClassLoader.defineClass(ClassLoader.java:800)at   java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)             at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)             在java.net.URLClassLoader.access $ 100(URLClassLoader.java:71)at   java.net.URLClassLoader $ 1.run(URLClassLoader.java:361)at   java.net.URLClassLoader $ 1.run(URLClassLoader.java:355)at   java.security.AccessController.doPrivileged(Native Method)at   java.net.URLClassLoader.findClass(URLClassLoader.java:354)at   java.lang.ClassLoader.loadClass(ClassLoader.java:425)at   sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)at at   java.lang.ClassLoader.loadClass(ClassLoader.java:358)at   sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

    我的源代码:

    import java.io.*;
    import static java.lang.System.out;
    
    /**
    encript by caesar chipher
    */
    public class Caesar {
        public static void main(String[]args) {
            if (args.length == 3)
            {
            }
            else {
                System.out.println("USAGE: java Caesar in out key");
                return;
            }
            try ( //class which will be ciphered
                FileInputStream in = new FileInputStream(args[0])) {
                    //in output will go encripted byte code of file
                    FileOutputStream out = new FileOutputStream(args[1]);
                    //this is key
                    int key = Integer.parseInt(args[2]);
                    int ch;
    
                    //in cycle encript byte code
                    while ((ch = in.read()) != -1) {
                        byte c = (byte)(ch + key);
                        out.write(c);
                    }
                }
            catch(IOException exception)
            {
            }
            out.close();
        }
    }
    

1 个答案:

答案 0 :(得分:0)

除了您想要加密文件的方式之外,还有一个更基本的问题。

  

我想简单地用零键加密第一个参数,输出将传输到第二个参数,然后我想运行第二个文件(第二个参数)。

在此异常中表现出来

$ java Hello1 
Exception in thread "main"
java.lang.NoClassDefFoundError: Hello1 (wrong name: HelloWorld) 

class名称必须等于*.class文件名。如果您的班级名称为HelloWorld,则只有在其名称存储在名为HelloWorld.class的类文件中时才能使用。

如果您将文件重命名为Hello1.class,则它将无效,因为您指示Java虚拟机执行类Hello1,但此类未存储在文件Hello1.class中。