2017-03-17 39 views
-1

我使用这种方法来解密我收到的消息:Java:如何将字符串转换为base64string?

private static String decrypt(String key, String initVector, String dataToDecrypt) { 
    try { 
     IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8")); 
     SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); 

     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); 
     cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); 

     String safeString = dataToDecrypt.replace('-', '+').replace('_', '/'); 
     byte[] decodedString = Base64.decodeBase64(safeString); 

     byte[] original = cipher.doFinal(decodedString); 

     return new String(original); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

    return null; 
} 

但是,我Android应用程序崩溃,显示以下异常:

java.lang.NoSuchMethodError: No static method decodeBase64(Ljava/lang/String;)[B in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/ext.jar)

因此,decodeBase64需要base64string的方法,但是我通过string。在这里我的问题是:

如何String转换为base64string?!

请注意,我试图DECODE不编码。几乎所有提供的解决方案都是针对编码部分的,这不是我的担心。

PS:我正在开发在Android工作室Android的应用程序

+1

的可能的复制[阿帕奇共享编解码器与Android:找不到方法(http://stackoverflow.com /问题/ 2047706/Apache的公地编解码器与-Android的可能 - 不找方法) – Kiskae

+0

@Kiskae:我所有的尊重,这绝对不是重复。我正在问一个非常不同的问题。他ia问:“Android:找不到方法,该如何解决?”与此同时,我正在问一个非常精确的问题,即“如何将字符串转换为base64string”..如果问题的根源是相同的,那并不意味着问题是重复的。我不得不说,这是不公平的(在downvotes,关闭请求和重复的问题负责不过,当天我只是想学习和获得更好的感谢结束。)的Android –

+0

可能的复制 - decodeBase64崩溃应用(http://stackoverflow.com/questions/27276539/android-decodebase64-crashes-app) –

回答

1

试试这个:

Base64.encodeToString(mStringToEncode.getBytes(), Base64.NO_WRAP) 

它存在许多编码模式中使用自动完成看多Base64.NO_WRAP,Base64.CRLF等..

需要导入包:

import android.util.Base64; 
+0

我很抱歉,但这并没有奏效。另外,我试图解码不编码。 –

+0

这帮了很多忙,似乎我错误地把错误的导入:'org.apache.commons.codec.binary.Base64' ..现在它工作 –

+1

做得好! ;-) –

1

你检查this answer

 // decode data from base 64 
     private static byte[] decodeBase64(String dataToDecode) 
     { 
      byte[] dataDecoded = Base64.decode(dataToDecode, Base64.DEFAULT); 
      return dataDecoded; 
     } 

     //enconde data in base 64 
     private static byte[] encodeBase64(byte[] dataToEncode) 
     { 
      byte[] dataEncoded = Base64.encode(dataToEncode, Base64.DEFAULT); 
      return dataEncoded; 
     } 
+0

是的,但不是现在的工作..我试图理解为什么! ..同时我发布了原来的问题我有 –

1
public static String toBase64(String value){ 
    if (value == null) 
     value = ""; 
    return Base64.encodeToString(value.trim().getBytes(), android.util.Base64.DEFAULT); 
} 
1

试试这个代码

private static String encryptNew(String key, String initVector, String dataToEncrypt) throws Exception{ 

     byte[] plainTextbytes = dataToEncrypt.getBytes("UTF-8"); 
     byte[] keyBytes = key.getBytes("UTF-8"); 
     byte[] IvkeyBytes = initVector.getBytes("UTF-8"); 

     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); 
     SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES"); 
     IvParameterSpec ivParameterSpec = new IvParameterSpec(IvkeyBytes); 
     cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); 
     plainTextbytes = cipher.doFinal(plainTextbytes); 
     return Base64.encodeToString(plainTextbytes, Base64.DEFAULT); 
    } 

    private static String decrypt(String key, String initVector, String dataToDecrypt) { 
      try { 

       byte[] cipheredBytes = Base64.decode(dataToDecrypt, Base64.DEFAULT); 
       byte[] keyBytes = key.getBytes("UTF-8"); 
       byte[] IvkeyBytes = initVector.getBytes("UTF-8"); 

       Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); 
       SecretKeySpec secretKeySpecy = new SecretKeySpec(keyBytes, "AES"); 
       IvParameterSpec ivParameterSpec = new IvParameterSpec(IvkeyBytes); 
       cipher.init(Cipher.DECRYPT_MODE, secretKeySpecy, ivParameterSpec); 
       cipheredBytes = cipher.doFinal(cipheredBytes); 

       return new String(cipheredBytes,"UTF-8"); 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 

      return null; 
     } 
+0

很好的答案,非常感谢 –