【问题标题】:Encript and load file加密和加载文件
【发布时间】:2016-04-22 05:38:49
【问题描述】:

请帮我找出错误。 我有一个类文件。我取这个类的一个字节码并用凯撒密码加密它。我有几个命令提示符参数:

  1. 类文件:我们对其进行加密,
  2. 类文件:输出将在其中传输
  3. key:我们添加到每个字节码的数字 第一个参数。

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

我编译:

javac Caesar.java

运行:

java Caesar HelloWorld.class Hello1.class 0

(注意 - 我使用零键,所以文件不应该被更改)

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

julia@julia-Aspire-5680 ~/zagruzchik $ java Hello1 中的异常 线程“主”java.lang.NoClassDefFoundError:Hello1(错误名称: HelloWorld) 在 java.lang.ClassLoader.defineClass1(Native Method) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:800) 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 在 java.net.URLClassLoader.access$100(URLClassLoader.java:71) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:361) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:425) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:358) 在 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();
    }
}

【问题讨论】:

  • 您的代码目前在括号使用方面不正确。我试图格式化它,但这条线导致了一个问题,我不确定你在哪里 { 应该去:try ( //class which will be ciphered

标签: java load bytecode caesar-cipher


【解决方案1】:

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

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

在这个异常中表现出来

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

class 名称必须等于 *.class 文件名。如果你的类名是HelloWorld,它只能在它存储在一个名为HelloWorld.class 的类文件中时使用。

如果您将文件重命名为Hello1.class,它将不起作用,因为您指示Java 虚拟机执行类Hello1,但该类未存储在文件Hello1.class 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2017-03-21
    • 2010-12-17
    • 2019-09-28
    • 2017-02-03
    相关资源
    最近更新 更多