Проверка QR-кода Uidai возвращает False

Мы распаковали образцы данных qr-кода adhaar, и мы можем проверить номер мобильного телефона и адрес электронной почты, но мы застряли на последнем шаге нижеприведенного документа PDF, где мы не можем проверить подписанные данные с помощью подписи и сертификата. Мы пробовали использовать оба сертификата, которые uidai предоставили на сайте в разделе для разработчиков.

Документ Uidai приведен ниже:https://uidai.gov.in/images/resource/User_manulal_QR_Code_15032019.pdf.

Если кто-нибудь работал над этим, пожалуйста, помогите.

Код подтверждения приведен ниже:

public static boolean validateqr(
        byte[] signature, String QrCodeDataa, String public_key_path)
        throws SAXException, MarshalException, XMLSignatureException, InvalidKeyException, SignatureException, UnsupportedEncodingException {

    System.out.println("finalOutput=================>" + new String(output, "ISO-8859-1"));
    System.out.println();
    System.out.println("QrCode Data=================>" + QrCodeDataa);
    System.out.println();
    System.out.println("signatureData============>" + new String(signature, "ISO-8859-1"));
    System.out.println();
    System.out.println("public_key_path============>" + public_key_path);
    System.out.println();

    boolean valid = false;

    try {
        //byte[] signature = signatureData;
        //System.out.println("signedData====>"+signedData);         
        FileInputStream fin = new FileInputStream(public_key_path);
        CertificateFactory f = CertificateFactory.getInstance("X.509");
        X509Certificate certificate = (X509Certificate) f.generateCertificate(fin);
        //System.out.println("certificate====>"+certificate);
        Signature sign = Signature.getInstance(SHA_256_WITH_RSA);
        sign.initVerify(certificate);
        sign.update(QrCodeDataa.getBytes());
        valid = sign.verify(signature);

    } catch (InvalidKeyException | CertificateException | NoSuchAlgorithmException | IOException exp) {
        System.out.println("Error Occured Please Contact Your Administrator");
        exp.printStackTrace();
    }
    return valid;
}

1 ответ

Вам нужно извлечь открытый ключ из сертификата и передать его для инициализации.

sign.initVerify(certificate.getPublicKey());

Вышеуказанное должно работать. Кроме того, тестовые данные, представленные в спецификации, не подтверждают, но реальные QR-коды Aadhaar должны работать.

Вы также можете посмотреть здесь дополнительные тестовые данные / исправления в спецификации.

Другие вопросы по тегам