2013-11-26 110 views
1

我是一個新手,需要一些幫助。我在這裏有一個用於解密數據的代碼。它的工作意味着它可以解密數據,但問題是;它只能顯示解密數據(第29行)的1個值,而不是3個或更多,取決於我想要它的方式(我怎樣才能解密第30行和第31行的數據?)。下面我發佈了相關的代碼給我的問題,希望這裏的任何人都可以幫助我解決這個問題。如何返回超過1個字符串的值?

public class CipherUtils 
{ 
static Log log = LogFactory.getLog(CipherUtils.class); 
    private static byte[] key = "xxxxxx".getBytes(); 
    private static byte[] iv = "xxxxxx".getBytes(); 

public static String decrypt(String strToDecrypt) 
{ 
    try 
    { 
     //Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); 
     Cipher cipher = Cipher.getInstance("aes/cbc/nopadding"); 
     final SecretKeySpec secretKey = new SecretKeySpec(key, "AES"); 
     IvParameterSpec ips = new IvParameterSpec(iv); 
     //cipher.init(Cipher.DECRYPT_MODE, secretKey); 
     cipher.init(Cipher.DECRYPT_MODE, secretKey,ips); 
     final String decryptedString = new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt))); 
     return decryptedString.trim(); 
    } 
    catch (Exception e) 
    { 
     log.error("Error while decrypting : " + strToDecrypt , e); 
    } 
    return null; 
} 

public static void main(String args[]) throws Exception 
{ 
    String a = CipherUtils.decrypt("yXTVA6oG4kWOlvfKN/qXwa3VgEyiBu4kkgKh9WHt0s8=" 
            ,"yX7JI7IaExK3eBC6BU5RdCvkCrAAcyV3YTmHqYH5nG0="            
            ,"yj56tfZEh3405yEwladp+ml/nk/h8Cx56XnP5Ycdeio="); 
    System.out.println(">>>"+a.trim()); 
} 
} 

在此先感謝。

+0

好.....所以你想解密多個字符串,然後你想要什麼作爲回報?你想連接三個解壓字符串的結果,或者首先你想連接三個字符串然後解密? –

+0

我不想連結結果,我只是想單獨解密它,並顯示所有結果。 – StrikeNeo

回答

1

你的方法只解密一個參數(名爲strToDecrypt),但你傳遞三個參數。

你可以在這裏做幾件事情,最簡單的方法是模擬地調用3次解密,每次解密都有一個不同的字符串。 您也可以重寫列表來遍歷列表。

http://www.tutorialspoint.com/java/java_using_iterator.htm

+0

那麼我怎樣才能讓它需要3個參數,以便我可以解密3個數據? – StrikeNeo

1
public class CipherUtils 
{ 
    static Log log = LogFactory.getLog(CipherUtils.class); 
    private static byte[] key = "xxxxxx".getBytes(); 
    private static byte[] iv = "xxxxxx".getBytes(); 

    public static String[] decrypt(String[] strToDecrypt){ 
    try{ 
     String[] strDecrypted; 
     //Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); 
     Cipher cipher = Cipher.getInstance("aes/cbc/nopadding"); 
     final SecretKeySpec secretKey = new SecretKeySpec(key, "AES"); 
     IvParameterSpec ips = new IvParameterSpec(iv); 
     //cipher.init(Cipher.DECRYPT_MODE, secretKey); 
     cipher.init(Cipher.DECRYPT_MODE, secretKey,ips); 
     for(int i =0;i<strToDecrypt.length ; i++){ 
      final String decryptedString = new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt [i]))); 
      strDecrypted[i] = decryptedString ; 
     } 
     return strDecrypted;  
    }catch (Exception e){ 
     log.error("Error while decrypting : " + strToDecrypt , e); 
     } 
    return null; 
} 

public static void main(String args[]) throws Exception 
{ 
    String array[] =  {"yXTVA6oG4kWOlvfKN/qXwa3VgEyiBu4kkgKh9WHt0s8=","yX7JI7IaExK3eBC6BU5RdCvkCrAAcyV3YTmHqYH5nG0=","yj56tfZEh3405yEwladp+ml/nk/h8Cx56XnP5Ycdeio="}; 

    String a = CipherUtils.decrypt(array); 
    System.out.println(">>>"+a.trim()); 
    } 
} 

我所做的是我已經採取了所有字符串解密一個String數組中,並傳遞給方法。然後在該方法中,我解密字符串並將其添加到另一個數組中。然後完成後,我返回包含所有解密行的數組。然後您可以從數組中獲取它。

+0

感謝您的回覆,我現在要試一試。 – StrikeNeo

1
public static String[] decrypt(String[] strToDecrypt) 
{ 
    String decryptedString[] = new String[strToDecrypt.length]; 
    for(int i = 0;i<strToDecrypt.length;i++) { 
    try 
    { 
     //Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); 
     Cipher cipher = Cipher.getInstance("aes/cbc/nopadding"); 
     final SecretKeySpec secretKey = new SecretKeySpec(key, "AES"); 
     IvParameterSpec ips = new IvParameterSpec(iv); 
     //cipher.init(Cipher.DECRYPT_MODE, secretKey); 
     cipher.init(Cipher.DECRYPT_MODE, secretKey,ips); 
     decryptedString[i] = new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt[i]))); 

    } 
    catch (Exception e) 
    { 
     log.error("Error while decrypting : " + strToDecrypt[i] , e); 
    } 
    }return decryptedString; 
} 
+0

所以我只是根據這個糾正我的代碼?謝謝。 – StrikeNeo

相關問題