2011-03-19 158 views
11

我轉換成祕密密鑰字節,下面的代碼將密鑰轉換爲字節,如何將其轉換回密鑰?

SecretKey key = KeyGenerator.getInstance("DES").generateKey(); 
byte[] bkey=key.getEncoded(); 

現在我如何才能從bkey的關鍵?我想:

SecretKeySpec secretkey = new SecretKeySpec(bkey,"DES"); 
SecretKeyFactory sfkey = SecretKeyFactory.getInstance("DES"); 
SecretKey skey = sfkey.generateSecret(secretkey); 

我得到以下錯誤:

Error during Exception java.security.spec.InvalidKeySpecException: Inappropriate key specification 
+1

你爲什麼需要這樣做?只需將'key'傳遞給你的密碼即可。 – user634618 2011-03-19 19:31:11

+0

爲什麼這是投票?對我來說似乎是一個合理的問題。 – MeBigFatGuy 2011-03-19 19:31:21

+0

@ user634618:我實際上使用該字節格式將其保存在數據庫中並將其用於解密 – Princeyesuraj 2011-03-19 19:40:38

回答

28

這應該工作

SecretKey key = KeyGenerator.getInstance("DES").generateKey(); 
    byte[] data = key.getEncoded(); 
    SecretKey key2 = new SecretKeySpec(data, 0, data.length, "DES"); 
0

AES = DES!儘管如此,它仍然是位的胡斯塔一羣(對AES 128/192/256位)

+0

對不起,它的AES不是DES – Princeyesuraj 2011-03-19 19:27:49

3

嚐嚐這個代碼...

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); 
    } 
}