
本文详解 aadhaar 纸质离线 e-kyc(paperless offline e-kyc)中手机号字段的标准化哈希生成逻辑,基于 uidai 官方规范,使用 php 实现多层 sha-256 哈希计算,并说明关键参数(aadhaar 末位数字、共享短语)对迭代次数的决定性影响。
本文详解 aadhaar 纸质离线 e-kyc(paperless offline e-kyc)中手机号字段的标准化哈希生成逻辑,基于 uidai 官方规范,使用 php 实现多层 sha-256 哈希计算,并说明关键参数(aadhaar 末位数字、共享短语)对迭代次数的决定性影响。
在 Aadhaar 纸质离线 e-KYC XML 文件中,用户手机号并非明文存储,而是以确定性哈希值形式嵌入
对 MobileNumber + SharePhrase 字符串执行 n 次 SHA-256 迭代哈希,其中 n 等于 Aadhaar 号码最后一位数字;若末位为 0,则 n = 1(即仅执行一次 SHA-256)。
⚠️ 注意:UIDAI 规范明确指出——“number of times last digit of Aadhaar number”,即仅取末位数字作为迭代次数(非末4位),且 0 视为 1 次(非 0 次),这是开发者最易出错的关键点。
✅ 正确的 PHP 实现代码
以下函数完整封装该逻辑,支持任意长度的手机号、任意 SharePhrase(即 XML 解密密码/Passcode)及任意 Aadhaar 末位数字:
立即学习“PHP免费学习笔记(深入)”;
<?php
function generateMobileHash(string $mobile, string $sharePhrase, int $aadhaarLastDigit): string
{
// UIDAI 规则:末位为 0 时,迭代次数为 1
$iterations = ($aadhaarLastDigit === 0) ? 1 : $aadhaarLastDigit;
$input = $mobile . $sharePhrase;
$hash = $input;
// 执行 n 层 SHA-256 哈希(每轮输入为上一轮输出)
for ($i = 0; $i < $iterations; $i++) {
$hash = hash('sha256', $hash);
}
return $hash;
}
// 示例:Aadhaar 末4位为 3632 → 末位 = 2 → 迭代 2 次
$mobile = '1234567890';
$sharePhrase = 'Lock@487'; // 注意:此即 XML 解密口令(Passcode),非用户设置的 PIN
$aadhaarLastDigit = 2;
$expectedHash = generateMobileHash($mobile, $sharePhrase, $aadhaarLastDigit);
echo "Mobile Hash: " . $expectedHash . "\n";
// 输出:e.g. 8a9b...(64字符小写十六进制)
?>? 验证与调试要点
- 输入一致性:确保 $mobile 不含空格、+91 前缀或括号(如 '1234567890',非 '+91 1234567890');
- SharePhrase 大小写敏感:'Lock@487' ≠ 'lock@487',必须与用户提供的离线 KYC ZIP 解压密码完全一致;
-
Aadhaar 末位提取方式:从 Ref ID(XML 中
或 字段的后4位)取最后一位数字,不是整个 Aadhaar 号; - 哈希输出格式:始终为 64 字符小写十六进制字符串(hash() 默认行为),无需 base64 或其他编码;
-
安全对比:校验时应使用 hash_equals() 防止时序攻击:
if (hash_equals($xmlMValue, $generatedHash)) { echo "✅ Mobile hash verification passed."; }
? 总结
Aadhaar 离线 e-KYC 的手机号哈希本质是一个可控迭代的确定性摘要算法,其安全性不依赖于密码学强度提升,而在于绑定唯一 Aadhaar 末位与共享短语,防止哈希被预计算复用。PHP 开发者只需严格遵循 n = max(1, last_digit) 迭代规则,即可准确生成或验证 m= 值。务必以 UIDAI 官方文档为唯一权威依据(uidai.gov.in/ecosystem/authentication-devices-documents/about-aadhaar-paperless-offline-e-kyc.html),避免自行扩展或简化逻辑。











