2013-12-14 102 views
3

我試圖讓解密邏輯和knnow是加密的字符串鍵和鹽值已經使用由: 重點:8d6ea4d3e6f8c4f8641516baa5e42b85 轉型:AES/CBC/ISO10126PADDING 鹽:1c4dd21d7ba43bdd 迭代:0 加密字符串:JO0blEp + nEl5nNhgUqoZRJNecogM1XHIXUCatPOJycs =解密使用AES 256使用Java

密鑰和鹽中給出的樣品here..The要點是示出了其中我有這種數據的格式。加密方法基於JDK(SunJCE)的默認JCE提供程序。

現在基於上面的信息,我試圖構建解密邏輯。幾個疑問: 1.使用AES-265時,它可以有128位密鑰和64位鹽值嗎?或者我錯誤地解釋了這些信息。 2.看到加密的字符串,它看起來像是Base64編碼的值,我們需要在解密時解碼它。我的理解是否正確? 3.下面是我正在編寫的解密邏輯,當我調用doFinal()函數時,出現錯誤:「javax.crypto.BadPaddingException:給定的最終塊未正確填充」。 。 ,我從過去的三天:(這裏來襲能否請您指出或給我說在這裏用於解密具有infromation確切的代碼:

public static void main(String[] args) throws Exception 
{ 
     String encstring = "JO0blEp+nEl5nNhgUqoZRJNecogM1XHIXUCatPOJycs=";   
     String salt1 = "1c4dd21d7ba43bdd"; 
     String keyStr = "8d6ea4d3e6f8c4f8641516baa5e42b85"; 


     byte[] keyBytes = Hex.decodeHex(keyStr.toCharArray()); 

     SecretKey secret2 = new SecretKeySpec(keyBytes, "AES"); 

     byte[] iv = new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 
     AlgorithmParameterSpec params = new IvParameterSpec(iv); 


     Cipher cipher2 = Cipher.getInstance("AES/CBC/ISO10126PADDING", "SunJCE"); 


     cipher2.init(Cipher.DECRYPT_MODE, secret2, params); 
     byte[] encryptedString = Base64.decodeBase64(encstring.getBytes()); 
     byte[] plaintext1 = cipher2.doFinal(encryptedString); 

     System.out.println(new String(plaintext)); 
     } 
    } 

回答

0

首先幾點看法:

  • 你說這是AES256(使用256位鍵),但你的鑰匙看起來可能是32個十六進制數字這給柯128位 y數據。

  • 你說你有一個但AES不使用鹽。而且你實際上不會在你的代碼中使用salt。

  • 請您談一下0迭代,但是迭代是不是你指定AES,並且它不會是0

我的猜測是,你的關鍵其實是用來生成一個密碼關鍵。 Somethig像:

SecretKeyFactory factory = SecretKeyFactory.getInstance(algorithm); 
    KeySpec spec = new PBEKeySpec(password, salt, iterations, keyLength); 
    SecretKey theKey = factory.generateSecret(spec); 

拿在回答一看這個問題:Java 256-bit AES Password-Based Encryption

+0

你好,按建議我修改了代碼。但仍然沒有運氣。我得到了同樣的錯誤:「javax.crypto.BadPaddingException:鑑於最後的塊沒有正確填充。請你指出是否有任何問題在下面的代碼或任何建議: – user3101544

+0

有太多未知,你需要有在你的解密工作之前,100%是正確的。BadPaddingException只是解密過程中出現問題的一個症狀。除非你能獲得有關加密過程的確切信息,否則解密將不會成功。它是一個密碼或一個真正的密鑰..如果密鑰然後它看起來是128位(不是256位),但爲什麼你有一個鹽,迭代是什麼?另外,運行在CBC模式,你需要知道確切的IV的價值。 –