Как проверить подпись xmldsig с помощью java.security - PullRequest
0 голосов
/ 07 июня 2018

Мне нужно проверить документ с конвертированной подписью xml-dsig с помощью пакета java.security.После загрузки я распаковываю документ и получаю объект Signature в соответствии с xsd - http://www.w3.org/2000/09/xmldsig#

Затем:

@Service
public class XmlSignatureCheckerImpl implements XmlSignatureChecker {
    private static final String ENCRYPTION_ALGORITHM = "RSA";

    private static final String HASH_ENCRYPTION_ALGORITHM = "SHA1withRSA";

    @Override
    @Nullable
    public PublicKey getPublicKey(byte[] exp, byte[] mod) {
        BigInteger modulus = new BigInteger(1, mod);
        BigInteger exponent = new BigInteger(1, exp);
        RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);

        KeyFactory fact;
        try {
            fact = KeyFactory.getInstance(ENCRYPTION_ALGORITHM);
            return fact.generatePublic(rsaPubKey);
        } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    @Nullable
    public Boolean verify(byte[] message, byte[] signature, PublicKey publicKey) {
        final Signature sig;
        try {
            sig = Signature.getInstance(HASH_ENCRYPTION_ALGORITHM);
            sig.initVerify(publicKey);
            sig.update(message);
            boolean verify = sig.verify(Base64.encodeBase64Chunked(signature));
            return verify;
        } catch (NoSuchAlgorithmException | SignatureException | InvalidKeyException e) {
            e.printStackTrace();
        }
        return null;
    }
}

Вызовите getPublicKey и проверьте, в результате я получил несоответствие длины подписи, если яне закодировал подпись Я не получил несоответствие, но также проверка ложна, но я использую тестовые данные, которые полностью действительны.Откажись с поиском ошибки, помоги мне.Пожалуйста.Кодировка файла UFT-8.

1 Ответ

0 голосов
/ 09 июня 2018

Вы смотрели официальную документацию?Кажется, работать с фабрикой знаков немного удобнее http://www.oracle.com/technetwork/articles/javase/dig-signature-api-140772.html

Кроме того, я нашел эти примеры, если они будут полезны https://www.java -tips.org / java-ee-tips-100042/158-XML-цифровая подпись апи / 1473-используя-на-Java-XML-цифровая подпись api.html

...