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.


  • Mod

    Werde konkreter! Von welchen Werten reden wir denn? Was kommt raus?

    Und dir ist schon klar, dass die Umkehrung nicht eindeutig ist?


Anmelden zum Antworten