Slo by u RC4 pouzit pro inicializaci cislo z AD prevodniku?
Použil bych nějaký PRNG. IV nemusí být náhodný, jediné, co je potřeba, je, aby byl pokaždé jiný (a pokud možno něco trochu složitějšího než pouhá inkrementace).
Jak jsem mel nahodna cisla v JSONu, slo by to brat jako IV?
Pripadne to neresit JSONem, ale ziskat jedno cislo z AD. To imho nejsnazsi cesta k ziskani nahodne cisla na Arduino. Na pin se nic nepripoji a cte se hodnota.
Jak tomu predam IV?
Jak to myslis se zacatkem keystreamu?
První bajty RC4 keystreamu mají biasy a navíc z nich lze odvodit informace o klíči. Na tomto dojelo třeba WEP. Řeší se to tak, že na začátku to chvíli (50-1000 bajtů) točíš naprázdno a až pak šifruješ.
Kdyz na zacatku kus vyhodim, nebudou chybet data? Nebo mam z dat udelat neco jako "ABCdata.data.data", kde ABC blok 50 bajtu dlouhy?
Planuju desifrovat data z Arduina v Jave. Zatim pro testovani pouzivam:
public class RC4 {
public static void main(String[] args) throws Exception {
byte[] key = "tajneHeslo".getBytes("ASCII");
String clearText = "Moje tajna zprava.";
Cipher rc4 = Cipher.getInstance("RC4");
SecretKeySpec rc4Key = new SecretKeySpec(key, "RC4");
rc4.init(Cipher.ENCRYPT_MODE, rc4Key);
byte[] cipherText = rc4.update(clearText.getBytes("ASCII"));
Cipher rc4Decrypt = Cipher.getInstance("RC4");
rc4Decrypt.init(Cipher.DECRYPT_MODE, rc4Key);
byte[] clearText2 = rc4Decrypt.update(cipherText);
String decrypted = new String(clearText2, "ASCII");
System.out.println("decrypted" + decrypted);
}
}
Pokud prvni X bajtu budu "tocit", jak to poresim na serverove strane? Implementace Javy nejak resi toceni pevnich X bajtu a CBC?