2011-09-01 16 views
6

Dla szyfrowania w Javie ... artykuł o http://cwe.mitre.org/data/definitions/329.html stwierdza, że ​​wektor inicjujący powinien być inny za każdym razem, ale jeśli użyję innego IV do odszyfrowania niż ten, którego użyłem do zaszyfrowania, Zamiast oczekiwanych danych otrzymuję znaki śmieci.Jak dokonać IvParameterSpec losowego, ale nadal odszyfrować

Jaki jest właściwy sposób szyfrowania na jednym serwerze i deszyfrowania na innym bez konieczności przesyłania komunikatów między serwerami?

Powszechną techniką wydaje się być hardcode w tablicy bajtów, ale podobno to jest niepewne ???

+0

Źle zrozumiałeś artykuł. IV powinna być inna dla każdej zaszyfrowanej wiadomości, ale musisz użyć tego samego IV do odszyfrowania danej wiadomości, która została użyta do jej zaszyfrowania. Zobacz odpowiedź Jona Skeeta poniżej. –

Odpowiedz

9

wierzę IV jest jak sól - to nie jest tajemnicą, że właśnie wykorzystane do wprowadzenia dodatkowego elementu losowości tak, że ta sama wiadomość zaszyfrowana z tym samym kluczem nadal wychodzi inaczej za każdym razem.

Możesz więc przesłać IV, który był używany do szyfrowania, jako część zaszyfrowanej wartości, tak jak przechowujesz sól razem z hashem dla wartości hashowanej.

Oczywiście, mogę być całkowicie niepoprawny ...

+1

To prawda, IV jest XOR z pierwszym blokiem zwykłego tekstu, a następnie zaszyfrowane kluczem. Pozostałe bloki są XOR'd z poprzednim blokiem. Nazywa się to Cipher Block Chaining (CBC Block Chaining). Musisz odszyfrować tę samą IV, którą użyłeś do zaszyfrowania. Nie jest to tajemnica i może być wysłana/zapisana jako zwykła. Powinieneś losowo generować nową wartość IV przy każdym szyfrowaniu danych. Jego celem jest dodanie losowości do zaszyfrowanych danych, więc te same dane, zaszyfrowane tym samym kluczem, wytworzą inny tekst szyfrowania. –

+0

Załóżmy, że jeśli serwer zaszyfruje zwykły tekst, serwer musi wysłać zaszyfrowany tekst wraz z IV do klienta? I czy IV może być wysłany w postaci takiej, jak zwykły tekst? – OnePunchMan

+0

@kaze: Nie jest jasne, o którym scenariuszu mówisz - ale tak, możesz wysłać IV jako zwykły tekst. –