SIM Lock 加密算法
输入ICCID 20位字符,如89860031010848334036. 生成16位字符密码: 2947600754513545
密钥KEY为14位的数字字符串,通过电话方式告知。
1. ICCID前四位丢弃不要8986(都是固定的)
2. 得到0031010848334036. 把此字符串与字符串key 进行对应位的异或运算. 如static u8 seed[] = "电话告知"; vPSW[l] = sSrc[i]^seed[l]
3. 得到vPSW. 这个vPSW可能有些字符范围不在’0’-‘9’ 之间.
4. 转换vPSW每位使其每位在’0’ – ‘9’ 之间 . 如vPSW[l] = sSrc[i]&0x07; (只取低3 bit 位)
5. 如果vPSW[0] 是’0’, 设置成’2’, 如果vPSW[8] 是’0’ 设置成’6’; 保证步骤6之后的转换最高位非0
a) 如 if (vPSW[0] == '0')
{
vPSW[0] = '2';
}
if (vPSW[(ONTIM_SPE_PIC_PSW_LEN/2)] == '0')
{
vPSW[(ONTIM_SPE_PIC_PSW_LEN/2)] = '6';
}
6. 把16位字符串转换成两个数值, 如 vPSW 假设是” 4853592662569874”,经转换得到
data1 = 48535926, data2= 62569874;
7. 对data1, data2 进行于运算得到decData1. 如decData1 = data1&data2;
8. 对data1, data2 进行异或运算得到decData2. 如decData2 = data1^data2;
9. 把decData1, decData2. 转换成字符串后合并,得到最终密码.
如decData1 = 12345678, decData2 = 90123456
得到密码是 1234567890123456
如何验证算法是否正确.
输入89860031010848334036
得到结果是2947600754513545, 说明算法正确,否则不正确.
输入ICCID 20位字符,如89860031010848334036. 生成16位字符密码: 2947600754513545
密钥KEY为14位的数字字符串,通过电话方式告知。
1. ICCID前四位丢弃不要8986(都是固定的)
2. 得到0031010848334036. 把此字符串与字符串key 进行对应位的异或运算. 如static u8 seed[] = "电话告知"; vPSW[l] = sSrc[i]^seed[l]
3. 得到vPSW. 这个vPSW可能有些字符范围不在’0’-‘9’ 之间.
4. 转换vPSW每位使其每位在’0’ – ‘9’ 之间 . 如vPSW[l] = sSrc[i]&0x07; (只取低3 bit 位)
5. 如果vPSW[0] 是’0’, 设置成’2’, 如果vPSW[8] 是’0’ 设置成’6’; 保证步骤6之后的转换最高位非0
a) 如 if (vPSW[0] == '0')
{
vPSW[0] = '2';
}
if (vPSW[(ONTIM_SPE_PIC_PSW_LEN/2)] == '0')
{
vPSW[(ONTIM_SPE_PIC_PSW_LEN/2)] = '6';
}
6. 把16位字符串转换成两个数值, 如 vPSW 假设是” 4853592662569874”,经转换得到
data1 = 48535926, data2= 62569874;
7. 对data1, data2 进行于运算得到decData1. 如decData1 = data1&data2;
8. 对data1, data2 进行异或运算得到decData2. 如decData2 = data1^data2;
9. 把decData1, decData2. 转换成字符串后合并,得到最终密码.
如decData1 = 12345678, decData2 = 90123456
得到密码是 1234567890123456
如何验证算法是否正确.
输入89860031010848334036
得到结果是2947600754513545, 说明算法正确,否则不正确.