2012-10-16 121 views
0

我試圖將加密和解密函數轉換爲在Java中用於以下PHP。但收到非法密鑰大小錯誤。建議我在java中進行256位AES解密。將PHP加密和解密方法轉換爲java

PHP代碼

<?php 
    function encrypt ($data,$salt) { 
     $hash = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($salt), $data, MCRYPT_MODE_CBC, md5(md5($salt)))); 
     return $hash; 
    } 
    function decrypt ($encdata,$salt) { 
     $string = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($salt), base64_decode($encdata), MCRYPT_MODE_CBC, md5(md5($salt))); 
     return $string; 
    } 
?> 

轉換Java代碼:

//The below code found in http://www.logikdev.com/2010/11/01/encrypt-with-php-decrypt-with-java/ 
    public static String md5(String input) throws NoSuchAlgorithmException { 
     MessageDigest md = MessageDigest.getInstance("MD5"); 
     byte[] messageDigest = md.digest(input.getBytes()); 
     BigInteger number = new BigInteger(1, messageDigest); 
     return number.toString(16); 
    } 

    public String decrypt(String encryptedData) { 
     String decryptedData = null; 
     try { 
      SecretKeySpec skeySpec = new SecretKeySpec(md5("5A17K3Y").getBytes(), "AES");   
      String initialVectorString=md5(md5("5A17K3Y")); 
      IvParameterSpec initialVector = new IvParameterSpec(initialVectorString.getBytes()); 
      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding","SunJCE");    
      cipher.init(Cipher.DECRYPT_MODE, skeySpec, initialVector);   
      encryptedData=encryptedData.replace('-','+').replace('_','/').replace(',','='); 
      byte[] encryptedByteArray = (new org.apache.commons.codec.binary.Base64()).decode((encryptedData.getBytes()));   
      byte[] decryptedByteArray = cipher.doFinal(encryptedByteArray); 
      decryptedData = new String(decryptedByteArray, "UTF8"); 
     } catch (Exception e) {   
      System.out.println("Error. Problem decrypting the data: " + e); 
     } 
    } 

問題對數據進行解密:java.security.InvalidKeyException:非法密鑰大小

回答

0

您會收到一個非法如果您尚未安裝無限強度管轄區文件,則會出現密鑰大小錯誤。這些文件允許Java使用更強的密鑰長度(例如256位AES)。

轉到Oracle download site並尋找與您的Java版本匹配的文件。如果您所在的國家/地區合法,請安裝這些文件並享受更強大的加密。

附註:你是否研究過這個問題?第一個​​表現會回答你的問題)。