Was ist der Unterschied zwischen SecretKey
vs SecretKeySpec
Klassen in Java?Warum wird eine SecretKeySpec benötigt, um einen Schlüssel aus einem Passwort in Java abzuleiten?
Die Dokumentation von SecretKeySpec
sagt:
kann es eine SecretKey von einem Byte-Array
In diesem Code konstruieren, verwendet werden soll, wenn ich secretKey.getEncoded()
oder secret.getEncoded()
, in hex drucken dann beide geben die gleiche Ausgabe. Also, warum brauchen wir die SecretKeySpec
? Hier
final String password = "test";
int pswdIterations = 65536 ;
int keySize = 256;
byte[] ivBytes;
byte[] saltBytes = {0,1,2,3,4,5,6};
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
PBEKeySpec spec = new PBEKeySpec(
password.toCharArray(),
saltBytes,
pswdIterations,
keySize
);
SecretKey secretKey = factory.generateSecret(spec);
SecretKeySpec secret = new SecretKeySpec(secretKey.getEncoded(),"AES");
ist der Ausgang beiden Anrufe zu getEncoded()
:
00367171843C185C043DDFB90AA97677F11D02B629DEAFC04F935419D832E697
„Jeder SecretKey hat einen zugehörigen Algorithmus Namen.“ Würde das die Verschlüsselung nicht weniger sicher machen? sollte key nicht unabhängig vom Algorithmus sein? Wenn zum Beispiel jemand den Schlüssel erhalten würde, wären sie nicht in der Lage, den Algorithmus zu identifizieren, der für die Verschlüsselung verwendet wird? –
Starke Kryptographie funktioniert auf der Grundlage, dass jeder alles weiß, * außer * der Wert Ihres Schlüssels. Sobald jemand Ihren Schlüssel hat, ist es eine triviale Aufgabe, herauszufinden, wie Sie Daten verschlüsseln. Also nein, Ihr Algorithmus muss nicht geheim sein. –