61 lines
1.3 KiB
C++
61 lines
1.3 KiB
C++
#include "PSDGenerate.h"
|
|
|
|
/********************************************************************************************************************
|
|
* 新版密码支持BCD码 *
|
|
********************************************************************************************************************/
|
|
|
|
uint64_t Scramble(uint64_t number, uint64_t max)
|
|
{
|
|
int i = 0;
|
|
// some random values
|
|
uint64_t scramblers[] = { 3, 5, 7, 31, 343, 2348, 89897 };
|
|
number += (max / 7) + 6;
|
|
number %= max;
|
|
// shuffle according to divisibility
|
|
for (i = 0; i < 7; i++)
|
|
{
|
|
if (scramblers[i] >= max / 3) break;
|
|
number = ((number * scramblers[i]) % max)
|
|
+ ((number * scramblers[i]) / max);
|
|
}
|
|
|
|
|
|
return number % max;
|
|
}
|
|
|
|
int GetPasswordByUidCode(const uint8_t *uidcode,uint8_t* psd)
|
|
{
|
|
uint64_t val = 0,val1 = 0;
|
|
int i= 0;
|
|
uint64_t ulBCDPsd = 0;
|
|
|
|
for(i=2;i<10;i++)
|
|
{
|
|
val *=10;
|
|
val += uidcode[i]-0x30;
|
|
}
|
|
val += uidcode[10];
|
|
|
|
for(i=11;i<16;i++)
|
|
{
|
|
val1 *=10;
|
|
val1 += uidcode[i]-0x30;
|
|
}
|
|
val = val + val1;
|
|
ulBCDPsd = Scramble(val, 0xFFFFFFFF);
|
|
|
|
|
|
psd[0] = (ulBCDPsd&0xFF000000)>>24;
|
|
psd[1] = (ulBCDPsd&0x00FF0000)>>16;
|
|
psd[2] = (ulBCDPsd&0x0000FF00)>>8;
|
|
psd[3] = ulBCDPsd&0x000000FF;
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|