Java 对大消息进行签名,并使用recover消息进行验证

Java 对大消息进行签名,并使用recover消息进行验证,java,digital-signature,bouncycastle,Java,Digital Signature,Bouncycastle,我用Bouncy Castle编写的java代码对消息进行签名,然后进行验证 签名可以正常工作,但验证不能完全工作。使用短输入消息验证工作正常,但使用大输入消息(大于106)验证工作不正常 换句话说,当符号的输入文本长度变大时,验证无法完成。代码打印的结果: signature tampered 返回主消息的部分 public static String sigVer(PublicKey pu, PrivateKey pr, String original) throws Exception{

我用Bouncy Castle编写的java代码对消息进行签名,然后进行验证

签名可以正常工作,但验证不能完全工作。使用短输入消息验证工作正常,但使用大输入消息(大于106)验证工作不正常

换句话说,当符号的输入文本长度变大时,验证无法完成。代码打印的结果:

signature tampered
返回主消息的部分

public static String sigVer(PublicKey pu, PrivateKey pr, String original) throws Exception{
    //sign
    BigInteger big = ((RSAKey) pu).getModulus();
    byte[] text = original.getBytes();
    RSAKeyParameters rsaPriv = new RSAKeyParameters(true, big,((RSAPrivateKey) pr).getPrivateExponent());
    RSAKeyParameters rsaPublic = new RSAKeyParameters(false, big,((RSAPublicKey) pu).getPublicExponent());
    RSAEngine rsa = new RSAEngine();
    byte[] data;
    Digest dig = new SHA1Digest();
    ISO9796d2Signer eng = new ISO9796d2Signer(rsa, dig, true);
    eng.init(true, rsaPriv);
    eng.update(text[0]);
    eng.update(text, 1, text.length - 1);
    data = eng.generateSignature();

    //verify
    eng = new ISO9796d2Signer(rsa, dig, true);
    eng.init(false, rsaPublic);
    if (!eng.verifySignature(data)) {
        System.out.println("signature tampered");
    }
    try{
        if (eng.hasFullMessage()) {
            eng.updateWithRecoveredMessage(data);
            System.out.println("full");
        }
            eng.updateWithRecoveredMessage(data);
            byte[] message = eng.getRecoveredMessage();
            String ss = new String(message);
            return ss;
    }
    catch (Exception e) {
        System.out.println("can not recover");
        return null;
    }
}
为什么
eng.hasFullMessage()
函数返回false,这个问题应该如何解决?或者有谁能提出另一种解决方案,毫无问题地接受大量投入


谢谢大家。

可能重复的“否”是另一个问题,但代码相同。