По крайней мере для пятибуквенных паролей это CRC16 с полиномом 0x1021.
Вот примерный код на C, вычисляющий этот CRC16 по заданной строке:
Код:
#include <stdio.h>
unsigned char data[] = "aaaaa";
int main() {
unsigned short c, p=0x1021;
int i,j;
c = 0;
for(j=0;data[j];j++) {
c ^= data[j]<<8;
for(i=0;i<8;i++)
if(c&0x8000) c = (c<<1)^p; else c <<= 1;
}
c ^= 0x90d7;
printf("CRC16 = 0x%04X\n",c);
return 0;
}
В целом зависимость может быть сложнее (например, полином или константа зависеть от длины пароля).
Но для нахождения пароля соответствующего 16294 (0x3FA6), достаточно перебрать пятибуквенные пароли и вычислить для них указанный выше CRC16.