Mir wurde kürzlich eine Aufgabe zugewiesen, meine Links und Parameter, die ich in dataskWithRequest in swift übergebe, zu verschlüsseln. Das Hauptproblem ist, sollte es die gleiche Ausgabe wie Android-Plattform produzieren. Das Android-Team hat bereits ein Backend mit Spring zur Entschlüsselung der Daten erstellt. Der Java-Code ist wie diese AESencrpWie mache ich eine plattformübergreifende Verschlüsselungsmethode, die sowohl in IOS als auch in Android funktioniert (nur AES-Verschlüsselung)?
Klasse {
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; }
} Ich kann das hier verwendete Methode ändern und die eingebaute Verschlüsselungsmethode von schnellen verwenden. Gibt es eine Möglichkeit zu tun, AES-Verschlüsselung in swift, die effizient ist und passt die Ausgabe von Java-Code
Ich versuchte - 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 CODE OUTPUT = "eJvkXYGzEjJ6RbYSp4a3OQ=="
SWIFT CODE OUTPUT = "9UiyETvuHTsN7eIo0HfQ+w=="
Da u sehen Es gibt einen Unterschied in beiden Ausgaben. Warum ist das?
Haben Sie jemals geschafft, dies funktioniert? Ich sehe mir genau dieses Problem an. Mein Java-Code ist Server-Seite, aber alles andere ist gleich. – Slayer0248
Ja, ich habe .. Ich werde die Antwort unter –
posten Eine gute Cross-Plattform-Lösung, die auch mehrere Sprachen unterstützt, ist [RNCryptor] (https://github.com/RNCryptor). Sie erhalten auch eine Authentifizierung und bei Bedarf eine Schlüsselableitung. – zaph