3

我正在与 Jarsigner 合作。我想检查给定的 jar 是否已签名。如果用户上传 jar 文件,我想查看 jarfile 是否已签名。我尝试使用以下代码(http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.html#integritycheck

    // Ensure the jar file is signed.
    Manifest man = jarFile.getManifest();
    if (man == null) {
        throw new SecurityException("The provider is not signed");
    } 

但即使我提供了一个未签名的 jar,man对象也不为空,并且不会引发此异常。如何检查给定的 jar 是否刚刚签名?

4

2 回答 2

0

您在引用的页面中途停了下来。您错过了验证签名的部分

于 2016-07-05T09:41:01.303 回答
0

假设您只想知道 jar 是否已签名(不验证签名本身),此代码段应该可以工作:

  boolean isJarSigned(JarFile jarFile) {
    try {
      final Manifest man = jarFile.getManifest();
      if (man == null)
        return false;

      // getEntries will contain all signed files
      return !man.getEntries().isEmpty();
    } catch (Throwable t) {
      t.printStackTrace();

      return false;
    } finally {
      // Make sure the jarFile gets always closed
      try {
        if (jarFile != null)
          jarFile.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

顺便说一句,我知道我的答案迟到了 3 年,但我自己也在拼命地寻找它,所以我想我不妨发布我的解决方案。

于 2016-07-05T09:26:15.020 回答