我最近分配了一個加密我的鏈接和參數的任務,我在swift中傳遞dataTaskWithRequest。最主要的是它應該產生與Android平臺相同的輸出。 android團隊已經使用spring創建了一個用於解密數據的後端。 Java代碼是這樣的我該如何做一個跨平臺的加密方法在IOS和Android(僅適用於AES加密..)?
類AESencrp {
private static final String ALGO = "AES"; private static final byte[] keyValue = new byte[]{'T', 'h', 'e', 'B', 'e', 's', 't', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y'}; public static String encrypt(String Data) throws Exception { Key key = generateKey(); Cipher c = Cipher.getInstance(ALGO); c.init(Cipher.ENCRYPT_MODE, key); byte[] encVal = c.doFinal(Data.getBytes()); String encryptedValue = new BASE64Encoder().encode(encVal); return encryptedValue; } public static String decrypt(String encryptedData) throws Exception { Key key = generateKey(); Cipher c = Cipher.getInstance(ALGO); c.init(Cipher.DECRYPT_MODE, key); byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData); byte[] decValue = c.doFinal(decordedValue); String decryptedValue = new String(decValue); return decryptedValue; } private static Key generateKey() throws Exception { Key key = new SecretKeySpec(keyValue, ALGO); return key; }
} 我不能改變這裏使用的方法和使用SWIFT的內置加密方法。是否有迅速是高效和Java代碼的輸出
我想匹配做的AES加密的方式 - POD Cryptoswift
do { let encrypted: [UInt8] = try AES(key: key, iv: iv, blockMode: .ECB).encrypt(inputBytes) let encrypted2: [UInt8] = try AES(key: key, iv: iv, blockMode: .ECB, padding: PKCS5).encrypt(inputBytes) let encryptedNSData = NSData(bytes: encrypted, length: encrypted.count) encryptedBase64 = encryptedNSData.base64EncodedStringWithOptions([]) let encryptedNSData2 = NSData(bytes: encrypted2, length: encrypted2.count) encryPadded = encryptedNSData2.base64EncodedStringWithOptions([]) let decrypted: [UInt8] = try AES(key: key, iv: iv, blockMode: .ECB).decrypt(encrypted) let result = String(bytes: decrypted, encoding: NSUTF8StringEncoding)! print("result\t\(result)") } catch { // some error }
就像你看到的兩種產品都有差異。爲什麼是這樣?
你有沒有設法得到這個工作?我正在研究這個確切的問題。我的java代碼是服務器端,但其他都是一樣的。 – Slayer0248
是的,我做了..我會在 –
以下發布答案一個很好的支持多種語言的跨平臺解決方案是[RNCryptor](https://github.com/RNCryptor)。您還可以獲得身份驗證以及是否需要密鑰派生。 – zaph