我如何生成Aadhar卡(印度公民用作其独特标识符)API集成的输入数据



我正在实现aadhar卡API,并且我被困在生成pid和skey xml block以获取输入xml数据,以下是两个关键元素的要求。

PID块数据应使用AES-256对称算法(AES/ECB/PKCS7PADDING)使用动态会话密钥进行加密。会话密钥依次使用不对称算法(RSA/ECB/PKCS1PADDING)使用2048位UIDAI公共密钥进行加密。

此元素的skey值是加密的256位AES会话密钥的基本-64编码值。

以下是我创建的代码:

 /////////////////////
$ci = '20170922';       
$method = 'AES-256-ECB';
$skey = openssl_encrypt (session_id(), $method ,$ci, true);
$pid_block = '<Pid ts="2016061512000000" ver="1.0"><Demo lang=""><Pi ms="E" mv="" name="Shivshankar Choudhury" lname="" lmv="" gender="" dob="" dobt="" age="" phone="" email="" /></Demo></Pid>';
$pid_encoded = base64_encode($pid_block);
$hash_256_pid = hash (  'sha256'  ,  $pid_block);
$hmac_pid_block = openssl_encrypt($hash_256_pid , $method , session_id());
$encoded_hmac_pid_block = base64_encode($hmac_pid_block);

$xml_data = '<Auth ac="public" sa="public" ver="1.6" txn="706bf70d" tid="public" uid="999999990019"><Uses pi="y" pa="n" pfa="n" bio="y" bt="FMR" otp="n" pin="n"/><Meta udc="UIDAI:SampleClient" fdc="NC" idc="NA" pip="127.0.0.1" lot="P" lov="560103"/><Skey ci="20131003" >'.$skey.'</Skey><Data type="X">'.$pid_encoded.'</Data><Hmac>'.$encoded_hmac_pid_block.'</Hmac></Auth>';
echo $xml_data;
$url = "http://auth.uidai.gov.in/1.6/public/9/9/";
        //setting the curl parameters.
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
// Following line is compulsary to add as it is:
        curl_setopt($ch, CURLOPT_POSTFIELDS,
                    "xmlRequest=" . $xml_data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300);
        $data = curl_exec($ch);
        curl_close($ch);
        //convert the XML result into array
        $array_data = json_decode(json_encode(simplexml_load_string($data)), true);

这已经在php的下面链接上回答。

如何在PHP中集成Aadhaar编号验证的Aadhaar卡身份验证API?

如果您要使用Java,则在AES中生成Skey(32个Characters,256位),然后对其进行加密,则需要使用Bouncycastle Jar。这是因为默认情况下Java的限制为128位(16个炭火)限制,然后对其进行编码。

您可以在UIDAI开发人员Portal

中找到示例代码

最新更新