2

我要做一点java自检程序(self-checksum)。这是我的代码示例

public class tamper {
      public static int checksum_self () throws Exception {
          File file = new File ("tamper.class");
          FileInputStream fr = new FileInputStream (file);
          int result;                   // Compute the checksum
          return result;
      }
      public static boolean check1_for_tampering () throws Exception {
            return checksum_self () != 0; // TO BE UPDATED!
      }
      public static int check2_for_tampering () throws Exception {
            return checksum_self ();
      }
      public static void main (String args[]) throws Exception {
          if (check1_for_tampering ()) {
            System.exit (-1);
          }
          float celsius = Integer.parseInt (args[0]);
          float fahrenheit = 9 * celsius / 5 + 32;
          System.out.println (celsius + "C = " + fahrenheit + "F");
      }
}

我试图做这样的事情

DigestInputStream sha = new DigestInputStream(fr, MessageDigest.getInstance("SHA"));
byte[] digest = sha.getMessageDigest();

for(..)
{
result = result + digest[i]
}

但是我真的不知道如何检查?

编辑:

感谢您的回答

@Adam Paynter 和 SpoonBenders

当然,这不是供我个人使用的。我不会用它来保护任何软件......

这是我必须为我的java课程做的“练习”......

4

2 回答 2

1

也许你应该看看签名的 jar 文件

于 2010-12-29T12:00:22.773 回答
0

要检查您首先需要创建一个校验和。可能直接在编译后,您需要在校验和创建模式下运行程序,该模式将创建校验和并将其存储在文件中或您可以在运行时访问的其他位置。

然后在运行时,您将需要加载该校验和,这将是您的预期结果。然后像您在代码中所做的那样对“tamper.class”执行校验和,并检查它是否与预期结果匹配。

这是你想要做的吗?

于 2010-12-29T11:45:38.767 回答