java - Uidai 二维码验证返回 False

标签 java cryptography qr-code x509certificate x509certificatevalidator

我们已经解压缩了 adhaar qr 代码示例数据,我们能够验证手机号码和电子邮件,但我们停留在下面 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;
}

最佳答案

您需要从证书中提取公钥并将其传递给初始化验证。

sign.initVerify(certificate.getPublicKey());

以上应该有效。此外,规范中提供的测试数据无法验证,但真正的 Aadhaar QR 应该有效。

您可能还想查看here了解更多测试数据/规范勘误表。

关于java - Uidai 二维码验证返回 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57900188/

相关文章:

java - 如何从库项目部署 Jar

java - 尝试从其他类获取数据时崩溃

ssl - 我的 SSL 证书应该使用多长的 RSA key ?

java - 我无法使用 zxing 读取翻转垂直二维码

android - 如何在 google glass android 中读取二维码?

java - 具有动态名称的 Gson (Android)

java - 文件的 WEB-INF 路径

java - 重用密码(防止初始化)

javascript - javascript的椭圆库和golang的ecdsa库的互操作性

java - 资源 'attr/borderColor' 与配置 '' 的错误重复值。使用 me.dm7.barcodescanner :zxing:1. 9.13 时?