SignatureException:签名长度不正确:得到1734但是期望128

时间:2014-07-25 17:41:49

标签: java security encryption digital-signature signtool

我有一个经过数字签名的 setup.exe 文件。它是使用SignTool.exe签名的。 我还有 myypfxfile.pfx mycertfile.cer 。 我在下面写了代码来编写java中的veirfy数字签名但它给我SignatureException:签名长度不正确:得到1734但是期待128。 请建议如何解决这个问题。

以下是 mycertfile.cer 的详细信息:

签名算法:sha1RSA

签名哈希算法:sha1

2014年7月23日至2015年7月31日有效

公钥:RSA(1024位) 30 81 89 02 81 81 00 ac 27 04 f6 2a 03 56 65 af 70 b3 32 6c 01 c1 7e 05 96 22 5a ae d0 b2 60 cf 64 f7 ff a5 55 ad 91 67 48 03 81 f7 86 a4 69 45 7c fa b9 b5 9e f9 03 ec be da b9 cd 92 b5 f6 a0 5c 52 9a ea ae aa 8d c6 24 d7 16 6c 1c a5 88 c8 b0 5d b5 cc 73 fb 13 14 63 e6 60 e4 e3 8b 3a f4 b8 ea c7 a8 4a c7 43 ae 4d b9 95 35 3b 60 d5 18 f6 fa 15 9d 5e 46 81 11 fa 02 44 d8 95 0a da b3 58 e6 65 cd c7 0d f9 02 03 01 00 01

public class CheckCertificate {

public static void main(String[] args) {

    /* Verify a DSA signature */

    /* import encoded public key */

    FileInputStream certfis = null;

    try {
        certfis = new FileInputStream(
                "E:\\GaneshDigiSignature\\mycertfile.cer");

        java.security.cert.CertificateFactory cf = null;
        java.security.cert.Certificate cert = null;

        cf = java.security.cert.CertificateFactory.getInstance("X.509");

        cert = cf.generateCertificate(certfis);

        PublicKey pubKey = cert.getPublicKey();

        /* input the signature bytes */
        FileInputStream sigfis = null;
        byte[] sigToVerify = null;

        sigfis = new FileInputStream(
                "E:\\GaneshDigiSignature\\myypfxfile.pfx");

        sigToVerify = new byte[sigfis.available()];

        sigfis.read(sigToVerify);

        sigfis.close();

        /* create a Signature object and initialize it with the public key */
        Signature sig = null;

        sig = Signature.getInstance("SHA1withRSA");

        sig.initVerify(pubKey);

        /* Update and verify the data */

        FileInputStream datafis = null;

        datafis = new FileInputStream("E:\\GaneshDigiSignature\\setup.exe");

        BufferedInputStream bufin = new BufferedInputStream(datafis);

        byte[] buffer = new byte[1024];
        int len;

        while (bufin.available() != 0) {
            len = bufin.read(buffer);
            sig.update(buffer, 0, len);
        }

        bufin.close();
        boolean verifies = sig.verify(sigToVerify);

        System.out.println("signature verifies: " + verifies);
    } catch (FileNotFoundException e) {
        System.out.println("FileNotFoundException:" + e.getMessage());
    } catch (IOException e) {
        System.out.println("IOException:" + e.getMessage());
    } catch (InvalidKeyException e) {
        System.out.println("InvalidKeyException:" + e.getMessage());
    } catch (NoSuchAlgorithmException e) {
        System.out.println("NoSuchAlgorithmException:" + e.getMessage());
    } catch (SignatureException e) {
        System.out.println("SignatureException:" + e.getMessage());
    } catch (CertificateException e) {
        System.out.println("CertificateException:" + e.getMessage());
    }

}

}

0 个答案:

没有答案