2012-03-07 98 views
0

我有一些代碼,是用Java工作正常,但是當我嘗試在Android中是有問題來使用它。轉換字節[]爲String,發送短信,返回byte []爲String

我試圖與Blowfish算法加密的短信。

與此代碼(關於機器人)的問題是,它不接受字節[],並且不會解密該消息。

發送SMS

 sMessage = "hello this is a message" 

    byte[] byteArray = EncryptBlowfish(sMessage); 
     //Convert the byte[] into a String which can be sent over SMS 
     StringBuffer strb = new StringBuffer(); 

     for(int x = 0; x<byteArray.length; x++){ 
     strb.append(byteArray[x]).append(","); 
     }//for loop 

     sMessage = strb.toString(); 

(sMessage然後經由SMS發送)

RECIVING所述SMS

  //Convert the String back to a byte[] which can be decrypted 
     String[] strArray = sMessage.split(","); 
     byte[] byteArray = new byte[strArray.length]; 
     int hold; 

     for (int x = 0; x < strArray.length; x++) { 
     hold = Integer.parseInt(strArray[x]); 
     byteArray[x] = (byte) hold; 
    }//for loop 

     sMessage = DecryptBlowfish(byteArray); 

加密方法

​​

解密方法

 public static String DecryptBlowfish(byte[] msg){ 
     byte[] decrypted =null; 
     try { 


     Cipher cipher = Cipher.getInstance("Blowfish"); 

      cipher.init(Cipher.DECRYPT_MODE, secretkey); 


    decrypted = cipher.doFinal(msg); 

     } catch(){ //NoSuchAlgorithmException, NoSuchPaddingException..etc 
    } 

    return decrypted; 
} 

該消息被加密,這產生了一個byte [],我已經然後轉換的字節[]爲一個字符串,該字符串的輸出將類似於這...

46,77,52,11,-108,91,-106,88,-81,-43,14,111,-118,-128,-92,-50,69, -44,100,-94,71,92,-49,116,

這個輸出然後通過手機短信發送。該字符串然後轉換回字節[] 但該字節數組不解密。

問題:

  1. 爲什麼會在Java應用程序此代碼的工作,但不能使用Android?
  2. 有沒有在做Android的這項工作的一種方式?
  3. 是否有字節[]轉換爲字符串和背面的一個更好的方法。

(請評論,如果再信息需要,謝謝)

回答

3

我想答案涉及到默認的字符編碼是在Android VS標準的Java什麼。如果使用msg.getBytes(Charset c)指定字符編碼,並且解碼新的String(byte [],Charset c),會發生什麼情況。

例子:

// String => byte [] 
byte[] bytes = message.getBytes(Charset.forName("ISO-8859-1")); 

// byte [] => String 
String foo = new String(bytes, Charset.forName("ISO-8859-1")); 

你可以找到字符集可以從:

for (String c : Charset.availableCharsets().keySet()) { 
    System.out.println(c); 
} 
+0

謝謝你在這個例子中,我將實現並返回反饋 – 2012-03-07 13:18:57

+0

亞當只是想再次感謝你,你也許想知道,我的Android應用程序中下面的代碼解決了這個問題 'Message.getBytes(「ISO-8859 -1「);' – 2012-03-07 13:46:17

1

我覺得這是一個問題,當你做出一個字節 - >字符串 - >字節轉換。嘗試發送未加密的字符串並檢索它並檢查它是否正確。

您應該在每個步驟指定編碼。

+0

謝謝,你能給我一個指定編碼的例子嗎?未加密的消息發送和檢索(只是雙重檢查)從你自己和亞當說的我認爲解決方案是在指定編碼,但不知道如何去做。但我現在會尋找一個例子 – 2012-03-07 13:18:03

+1

http://docs.oracle.com/javase/tutorial/i18n/text/string.html – Caner 2012-03-07 13:19:49

相關問題