???GSM????,????????:
-
??GSM????:GSM????????????,???????????(Linear Feedback Shift Register, LFSR)??????,???????????????
-
??LFSR??:??GSM???????LFSR????????,??LFSR?????????
-
??????:????????????????????,?????
????????????:
#include// LFSR???????? unsigned char lfsr(unsigned char state) { unsigned char lsb = state & 1; state >>= 1; if (lsb) state ^= 0x1B; // GMS?????????? return state; } // GSM???? void gsmEncrypt(unsigned char* key, unsigned char* plaintext, unsigned char* ciphertext, int length) { unsigned char state = 0x1; // ???? int i; for (i = 0; i < length; i++) { state = lfsr(state); ciphertext[i] = key[i] ^ state ^ plaintext[i]; } } int main() { unsigned char key[] = {0x7C, 0x5B, 0xCD, 0x27, 0x51, 0x8D, 0x8, 0x68}; // ?? unsigned char plaintext[] = {0x12, 0x34, 0x56, 0x78}; // ?? int length = sizeof(plaintext) / sizeof(unsigned char); unsigned char ciphertext[length]; // ?? gsmEncrypt(key, plaintext, ciphertext, length); printf("Ciphertext: "); for (int i = 0; i < length; i++) { printf("X ", ciphertext[i]); } printf("\n"); return 0; }
????????,???GSM???????LFSR???(0x1B)?????(0x1)??????????????????,???????????16???????
???,???????????????,?????????????,??????????????????,????????????????????