我如何为 Aadhar 卡生成输入数据(印度公民将其用作他们的唯一标识符)API 集成
How do i generate input data for Aadhar card (used by indian citizen as their unique identifier) API integration
我正在实施 aadhar 卡 api,但我在为输入 xml 数据生成 PID 和 sKey xml 块时遇到了困难,以下是对这两个关键元素的要求。
PID 块数据应使用 AES-256 对称算法 (AES/ECB/PKCS7Padding) 使用动态会话密钥加密。反过来,会话密钥使用非对称算法 (RSA/ECB/PKCS1Padding) 使用 2048 位 UIDAI public 密钥进行加密。
此元素的 Skey 值是加密的 256 位 AES 会话密钥的 base-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);
下面 link 已经回答了 PHP。
How To integrate Aadhaar Card Authentication Api for Aadhaar number Verification in PHP?
如果你要使用java,用AES生成skey(32个字符,256位)然后加密,你需要使用bouncycastle jar。这是因为 java 默认有 128 位(16 个字符)的限制,然后对其进行编码。
您可以在 uidai 开发者门户中找到示例代码
我正在实施 aadhar 卡 api,但我在为输入 xml 数据生成 PID 和 sKey xml 块时遇到了困难,以下是对这两个关键元素的要求。
PID 块数据应使用 AES-256 对称算法 (AES/ECB/PKCS7Padding) 使用动态会话密钥加密。反过来,会话密钥使用非对称算法 (RSA/ECB/PKCS1Padding) 使用 2048 位 UIDAI public 密钥进行加密。
此元素的 Skey 值是加密的 256 位 AES 会话密钥的 base-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);
下面 link 已经回答了 PHP。
How To integrate Aadhaar Card Authentication Api for Aadhaar number Verification in PHP?
如果你要使用java,用AES生成skey(32个字符,256位)然后加密,你需要使用bouncycastle jar。这是因为 java 默认有 128 位(16 个字符)的限制,然后对其进行编码。
您可以在 uidai 开发者门户中找到示例代码