Takže:
package exdev2.net.crypt;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class crypt {
private static final String ALGORITHM = "AES";
private static final int ITERATIONS = 2;
public static String encrypt(String value, String myKey, String salt) throws Exception {
Key key = generateKey(myKey);
Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.ENCRYPT_MODE, key);
String valueToEnc = null;
String eValue = value;
for (int i = 0; i < ITERATIONS; i++) {
valueToEnc = salt + eValue;
byte[] encValue = c.doFinal(valueToEnc.getBytes());
eValue = new BASE64Encoder().encode(encValue);
}
return eValue;
}
public static String decrypt(String value, String myKey ,String salt) throws Exception {
Key key = generateKey(myKey);
Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.DECRYPT_MODE, key);
String dValue = null;
String valueToDecrypt = value;
for (int i = 0; i < ITERATIONS; i++) {
byte[] decordedValue = new BASE64Decoder().decodeBuffer(valueToDecrypt);
byte[] decValue = c.doFinal(decordedValue);
dValue = new String(decValue).substring(salt.length());
valueToDecrypt = dValue;
}
return dValue;
}
private static Key generateKey(String myKey) {
byte[] kv = null;
kv = myKey.getBytes();
Key key = new SecretKeySpec(kv, ALGORITHM);
return key;
}
}
Máme:
encrypt(value, key,salt);
decrypt(value, key,salt);
-Value sou hodnoty které se (de)cryptuj
-key - je ten náš unikátní klíč, pokud je jinej než co byl použit při cryptování, nemůže se decryptovat (16 znaků snad postačí?)
-salt je vlastně náhodnej řetězec, nemá to vliv na crypt/uncrypt jen pokud zmeníme salt ale key je furt stejný tak vlastně výslednej hash vypadá uplně jinak, ale nehraje roli jestli máme stejný salt řetezec nebo ne, prostě na něm nezávisí vůbec decryptování, má sloužit jen jako jakési zmatení že každý poslání jakéhokoliv příkazu / dat se bude salt generovat nový řetězec, takže každá komunikace bude vypadat uplně jinak i když bude stejná a bude mít stejný key ...
Mám pravdu nebo se pletu? Je to částečně zkopčený a částečně upravený mnou...