Jak zaimplementować jakiś algorytm jednokierunkowy?

0

Otóż szukałem, szukałem i natrafiłem (chyba) na najprostszy z nich, nazywa się VMPC. Niestety nawet tak prosty, jest dla mnie za trudny. Znalazłem na wikipedii (tutaj) artykuł o tym, i nawet jego zapis.

 1. n = 0
 2. Powtarzaj kroki 3-6 L razy:
 3. s = P[ (s + P[n]) mod 256 ]
 4. Output = P[ (P[P[s]]+1) mod 256 ]
 5. Temp = P[n]
    P[n] = P[s]
    P[s] = Temp
 6. n = (n + 1) mod 256

Niby coś tam naskrobałem w delphi, ale coś nie działa.

function VMPC(aStr: String): String;
var I, N, L, S: Integer;  Temp: Char;
    P: String;
begin
  N := 0;
  L := Length(aStr);
  P := aStr;

  for I := 1 to L do
  begin

  S := Ord(      P[  (    S + Ord(P[N])       ) mod 256  ]       );
  Result := Result + P[   (   Ord(P[  Ord(P[S])  ]) + 1  ) mod 256   ];

  Temp := P[N];
  P[N] := P[S];
  P[S] := Temp;

  N := (N + 1) mod 256

  end;
end;

Dodałem trochę funkcji bo się typy nie zgadzały. Fajnie by było gdyby ktoś to poprawił (w c, php, c++, java, obojętnie).

0

gdzie P (256-elementowa permutacja) i s (1-bajtowa zmienna) są uzyskane z hasła szyfrującego wg algorytmu VMPC-KSA

VMPC-KSA3:

P : 256-byte table storing the permutation
s : 8-bit variable initialized by the VMPC KSA3 algorithm
c : fixed length of the cryptographic key in bytes, c {16...64}
K : c-element table storing the cryptographic key (po polskiemu: nasz string z hasłem)
z : fixed length of the Initialization Vector in bytes, z {16...64}
V : z-element table storing the Initialization Vector
n : 8-bit variable
m : 16-bit variable

  1. Set s to 0

  2. Set i-th element of P to i for i {0,1,...,255}

  3. Set m to 0

  4. Add modulo 256 (m modulo 256)-th element of P to s

  5. Add modulo 256 (m modulo c)-th element of K to s

  6. Set s to s-th element of P

  7. Swap (m modulo 256)-th element of P with s-th element of P

  8. Increment m

  9. Go to step 4 if m is lower than 768

  10. Set m to 0

  11. Add modulo 256 (m modulo 256)-th element of P to s

  12. Add modulo 256 (m modulo z)-th element of V to s

  13. Set s to s-th element of P

  14. Swap (m modulo 256)-th element of P with s-th element of P

  15. Increment m

  16. Go to step 11 if m is lower than 768

  17. Set m to 0

  18. Add modulo 256 (m modulo 256)-th element of P to s

  19. Add modulo 256 (m modulo c)-th element of K to s

  20. Set s to s-th element of P

  21. Swap (m modulo 256)-th element of P with s-th element of P

  22. Increment m

  23. Go to step 18 if m is lower than 768

Czyli wartość tablicy P uzyskujesz dopiero po wykonaniu w/w algorytmu.
Chyba nie sądziłeś, że będzie to takie proste? ;)

0

Proszę o pomoc w napisaniu programu z wykorzystaniem funkcji VMPC, próbowałem sam napisać jednak nie działa mi..

1 użytkowników online, w tym zalogowanych: 0, gości: 1