Hallo Ich baue eine iOS-Anwendung, die mit einem erholsamen Server kommuniziert. Dies erfordert meinen Java AES Code und Swift AES Code, um die gleichen Ergebnisse zu erzielen, die ich derzeit CryptoSwift benutze, unter Verwendung des Tutorials hier (AES Encrypt and Decrypt). Dies gibt mir jedoch andere Ergebnisse im Vergleich zu meinem Java-Code.Swift AES implmentation
Dies ist mein Java-Code:
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("AES");
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("AES");
c.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = new String(decValue);
return decryptedValue;
}
public static Key generateKey() throws Exception {
Key key = new SecretKeySpec(keyValue, "AES");
return key;
}
public static void main(String[] args) {
try {
System.out.println(AES.encrypt("test"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Dieser Code gibt mir xGdooY + 6V8q1cze7mR9TjQ ==
Hier ist mein Code swift in
import Foundation
import CryptoSwift
extension String {
func aesEncrypt(key: String, iv: String) throws -> String{
let data = self.dataUsingEncoding(NSUTF8StringEncoding)
let enc = try AES(key: key, iv: iv, blockMode:.CBC).encrypt(data!.arrayOfBytes())
let encData = NSData(bytes: enc, length: Int(enc.count))
let base64String: String = encData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0));
let result = String(base64String)
return result
}
func aesDecrypt(key: String, iv: String) throws -> String {
let data = NSData(base64EncodedString: self, options: NSDataBase64DecodingOptions(rawValue: 0))
let dec = try AES(key: key, iv: iv, blockMode:.CBC).decrypt(data!.arrayOfBytes())
let decData = NSData(bytes: dec, length: Int(dec.count))
let result = NSString(data: decData, encoding: NSUTF8StringEncoding)
return String(result!)
}
}
let key = "TheBestSecretKey" // length == 32
let iv = "gqLOHUioQ0QjhuvI" // length == 16
let s = "test"
let enc = try! s.aesEncrypt(key, iv: iv)
let dec = try! enc.aesDecrypt(key, iv: iv)
print(s)
print("enc:\(enc)")
print("dec:\(dec)")
print("\(s == dec)")
Dieser Code gibt mir LQu3c4HaOQf7W0CfnMMy1w ==
Wie Sie sehen können, funktionieren sie unabhängig, aber ich brauche sie zu comp atible
Was bedeutet iv (Initialisierungsvektor) und wie bekommt man es? –