Witam napisałem sobie taki testowy programik w javie:
public class AES {
public static String asHex (byte buf[])
{
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;
for (i = 0; i < buf.length; i++) {
if (((int) buf[i] & 0xff) < 0x10)
strbuf.append("0");
strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}
return strbuf.toString();
}
public static void main(String[] args) throws Exception {
// Get the KeyGenerator
SecureRandom srandom = new SecureRandom();
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(256, srandom); // 192 and 256 bits may not be available
// Generate the secret key specs.
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
// Instantiate the cipher
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec ,srandom);
byte[] encrypted = cipher.doFinal((args.length == 0 ? "password" : args[0]).getBytes());
System.out.println("encrypted string: " + asHex(encrypted));
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] original =
cipher.doFinal(encrypted);
String originalString = new String(original);
System.out.println("Original string: " +
originalString + " " + asHex(original));
}
}
Podpatrzyłem z innych przykładów na necie. Jako , że z kryptografią nie jestem za pan brat mam pytanko...
Chciałbym go użyć do szyfrowania hasła .
1.Czyli jak rozumiem user się rejestruje wtedy tworzę my hasło i zapisuję w postaci zaszyfrowanej i jak mniemam muszę także zapisać klucz szyfrujący ??
Czyli wygląda to tak : user się loguje tworzę klucz i szyfruję hasło czyli to moje :
cipher.init(Cipher.ENCRYPT_MODE, skeySpec ,srandom);
byte[] encrypted = cipher.doFinal((args.length == 0 ? "password" : args[0]).getBytes());
2.Następnie muszę też przechować ten skeySpec ?? ale jak go przechować w bazie i jak go potem odtworzyć ??
Bo potem jak rozumiem user się loguje i muszę porównać to co wpisał w formularzu ze zdekodowanym hasłem
czyli moje:
//utworzenie SkeySpec z bazy danych ?? tylko jak ?
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] original =
cipher.doFinal(encrypted);
String originalString = new String(original);
- Mam jeszcze pytanko czy jest to dobre zabezpieczenie i czy metodologia postępowania według mnie jest poprawna ??
Dziękuję za odpowiedź