modulo inverse
-
void mod_state() { state[0][0] = (state[0][0] * state[1][0]) % 256; state[1][1] = (state[1][1] * state[2][1]) % 256; state[2][2] = (state[2][2] * state[3][2]) % 256; state[3][3] = (state[3][3] * state[1][3]) % 256; } void inv_mod_state() { state[0][0] = inv_mod_256(state[0][0], state[1][0]); state[1][1] = inv_mod_256(state[1][1], state[2][1]); state[2][2] = inv_mod_256(state[2][2], state[3][2]); state[3][3] = inv_mod_256(state[3][3], state[1][3]); } int inv_mod_256(int remainder, int quotient) { short value = 0; while(((value * quotient) % 256) != remainder) value++; return value-1; }hey... ich bin grad dabei nen bisschen zu basteln und da bin ich auf was gestoßen...
also ich mach immer a * b mod 256 = x...
danach beim "inv_mod_256" versuch ich anhand x und a, nach b umzustellen.
aber wenn ich a * b mod 256 = x mache und dann wieder nach b umzustellen kann er bei manchen zahlen b nicht finden... aber wieso?? ich hab sie vorher doch mit a * b mod 256 = x gebildet??
-
a) Bist vermutlich schneller, wenn Du den erweiterten Euklidischen Algorithmus implementiertst. Der sagt Dir außerdem nebenbei, OB ein Inverses existiert.
b) Wenn ggt(a,256)!=1, dann exisitiert kein modulares Inverses von a bezüglich 256. Da 256 eine Zweierpotenz ist, ist es hier sogar einfacher, wenn a ungerade ist, gips keins.
-
Werde konkreter! Von welchen Werten reden wir denn? Was kommt raus?
Und dir ist schon klar, dass die Umkehrung nicht eindeutig ist?