Converted SecretKey into bytes, how to convert it back to a SecretKey?
46,144
Solution 1
This should work
SecretKey key = KeyGenerator.getInstance("DES").generateKey();
byte[] data = key.getEncoded();
SecretKey key2 = new SecretKeySpec(data, 0, data.length, "DES");
Solution 2
Try some of this code...
import javax.crypto.Cipher;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.security.InvalidKeyException;
public class DESede {
private static String algorithm = "DESede";
private static Key key = null;
private static SecretKey secretKey = null;
private static Cipher cipher = null;
private static DESede obj = new DESede();
private DESede() {
try {
key = KeyGenerator.getInstance(algorithm).generateKey();
KeyGenerator.getInstance(algorithm).getProvider();
byte[] keyBytes = key.getEncoded();
String keyFormat = key.getFormat();
String keyAlgorithm = key.getAlgorithm();
String keyString = new String(keyBytes);
System.out.println("Key Format::" + keyFormat);
System.out.println("Key Algorithm::" + keyAlgorithm);
System.out.println("Key String::" + keyString);
keyString.getBytes();
secretKey = new SecretKeySpec(keyBytes, 0, keyBytes.length, "DESede");
byte[] secretKeyBytes = key.getEncoded();
String secretKeyFormat = key.getFormat();
String secretKeyAlgorithm = key.getAlgorithm();
String secretKeyString = new String(secretKeyBytes);
System.out.println("Secret Key Format::" + secretKeyFormat);
System.out.println("Secret Key Algorithm::" + secretKeyAlgorithm);
System.out.println("Secret Key String::" + secretKeyString);
String keyNewString = "bXŒ*êÂÕê›æOÄ’Îý‘ãô|8¶Ë1";
byte[] keyNewBytes = keyString.getBytes();
secretKey = new SecretKeySpec(keyBytes, 0, keyBytes.length, "DESede");
cipher = Cipher.getInstance(algorithm);
} catch (Exception e) {
}
}
public static DESede getInstance() {
return obj;
}
public static byte[] encrypt(String input) throws InvalidKeyException,
BadPaddingException, IllegalBlockSizeException {
System.out.println("Inside encrypt()");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] inputBytes = input.getBytes();
System.out.println("Exit encrypt()");
return cipher.doFinal(inputBytes);
}
public static String decrypt(byte[] encryptionBytes)
throws InvalidKeyException, BadPaddingException,
IllegalBlockSizeException {
System.out.println("Inside decrypt()");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] recoveredBytes = cipher.doFinal(encryptionBytes);
String recovered = new String(recoveredBytes);
System.out.println("Exiting decrypt()");
return recovered;
}
public static void main(String args[]) throws InvalidKeyException,
BadPaddingException, IllegalBlockSizeException {
byte[] encryptedValue = DESede.encrypt("plz try encrypt and decrypt me");
System.out.println("encryptedValue::" + encryptedValue);
String decryptedValue = DESede.decrypt(encryptedValue);
System.out.println("decryptedValue::" + decryptedValue);
}
}
Related videos on Youtube
Author by
Princeyesuraj
Updated on August 14, 2020Comments
-
Princeyesuraj almost 4 years
I convert the secretkey into bytes with following code
SecretKey key = KeyGenerator.getInstance("DES").generateKey(); byte[] bkey=key.getEncoded();
Now how do I get the key from
bkey
? I tried:SecretKeySpec secretkey = new SecretKeySpec(bkey,"DES"); SecretKeyFactory sfkey = SecretKeyFactory.getInstance("DES"); SecretKey skey = sfkey.generateSecret(secretkey);
I get the following error:
Error during Exception java.security.spec.InvalidKeySpecException: Inappropriate key specification
-
user634618 over 13 yearsWhy do you need to do this? Just pass
key
to your cipher. -
MeBigFatGuy over 13 yearswhy was this down voted? seems like a reasonable question to me.
-
Princeyesuraj over 13 years@user634618: I actually use that bytes format to save it in database and use it back to decrypt
-
Bruno Rohée about 13 yearsUsing DES in 2011? Stop bothering and use cleartext, it's not any less secure...
-
Princeyesuraj about 13 years@Bruno Ya But I was just learning how DES works
-
araisbec over 11 years@BrunoRohée: Some people just want their questions answered without a condescending, elitist response. Comments like that make inexperienced users afraid to post their questions; I would know because I was (and still sort of am) in that situation myself...
-
Bruno Rohée over 11 years@araisbec It wasn't an answer but a comment, and some people actually do appreciate being stopped early when their wandering leads them straight to the abyss. Example abound on this very site of people using grossly insecure crypto because no one told them early enough.
-
AaA almost 7 years@BrunoRohée, I'm assuming you are talking PKCS container when you say cleartext. Is the key saved in cleartext smaller than its size in byte format?
-