2013-12-11 83 views
2

我有一臺運行Java-jar文件的Linux服務器來加密多個文件。如何在Java中加密並在Android和iOS中解密

Android和iPhone App下載該文件並解密。我必須使用什麼算法來做到這一點?

我認識到我在Java中使用的算法在Android中不起作用。我在Java中做的是:

private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception { 
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
    Cipher cipher = Cipher.getInstance("AES"); 
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec); 
    byte[] encrypted = cipher.doFinal(clear); 
    return encrypted; 
} 

什麼在上面的代碼中不起作用? 任何替代品?

+1

「那不行」,不僅是文字上不正確,這是一個可怕的描述以及。在客戶端嘗試做什麼?你是如何傳輸密文的? –

回答

8

的iOS:

我使用NSString + AESCrypt(https://github.com/Gurpartap/AESCrypt-ObjC

樣品:

NSString* encrypted = [plainText AES256EncryptWithKey:@"MyEncryptionKey"]; 
NSString* decrypted = [encrypted AES256DecryptWithKey:@"MyEncryptionKey"]; 

的Android(AES256Cipher - https://gist.github.com/dealforest/1949873):

加密:

String base64Text=""; 
try { 
    String key = "MyEncryptionKey"; 
    byte[] keyBytes = key.getBytes("UTF-8"); 
    byte[] ivBytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 
    byte[] cipherData; 

    //############## Request(crypt) ############## 
    cipherData = AES256Cipher.encrypt(ivBytes, keyBytes, passval1.getBytes("UTF-8")); 
    base64Text = Base64.encodeToString(cipherData, Base64.DEFAULT); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
}   

解密:

String base64Text=""; 
String plainText=""; 
try { 
    String key = "MyEncryptionKey"; 
    byte[] keyBytes = key.getBytes("UTF-8"); 
    byte[] ivBytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 
    byte[] cipherData; 

    //############## Response(decrypt) ############## 
base64Text = User.__currentUser.getPasscode(); 
    cipherData = AES256Cipher.decrypt(ivBytes, keyBytes, Base64.decode(base64Text.getBytes("UTF-8"), Base64.DEFAULT)); 
    plainText = new String(cipherData, "UTF-8");    
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 
+0

在Objective-C異常中,僅**僅用於不可恢復的編程錯誤,並被認爲是不可恢復的。 (分佈式對象是例外)。 – zaph

+0

這已被難住了,AESCrypt-ObjC上的默認行爲是使用nil IV,而在java中,您必須明確設置一個空白字節數組,並在此處顯示。萬分感謝! – scottyab

0

下面的鏈接提供了加密和解密使用對稱密鑰加密的一個很好的例子。

使用的對稱密鑰是自定義純文本。 這有助於我們需要使用IOS設備進行解密。 該示例使用AES 128位加密。請注意,它使用IV參數。 由於加密是128位,密鑰的長度應該是16.

在Android端,可以使用相同的方法實現,因爲語言是Java。在IOS CommonCryptor.h可用於加密解密。

http://www.java-redefined.com/2015/06/symmetric-key-encryption-ios-java.html

+0

答案應該包含代碼,而不是指向另一個網站。此外,這個問題包含了使用Java進行加密的代碼。 – zaph

相關問題