各位程序员好,
关于ios(Swift3)加密/解密:
我是一个ios快速初学者。我按照https://www.funboxpower.com/php_android_ios_aes上的教程完成了Android和PHP之间的加密/解密。
现在我想在iOS(Swift3)上做同样的事情,作者提到iOS(object-c)方法是这样的Wanted Compatible AES code Encrypt/Decrypt for Iphone, Android, Windows/XP
所以我找到了CryptoSwift并帮助我加密字符串。但其结果与Android和PHP不同。如何使用iOS(Swift3)和CryptoSwift进行加密/解密,就像教程(Android/PHP)那样?
以下是Swift上的加密代码:

import CryptoSwift

class LoginViewController: UIViewController {
   @IBAction func loginAction(sender: AnyObject) {
        let account = self.accountTextField.text
        let password = self.passwordTextField.text

        let key = "itakeylengthtotalis32keykeykey00"
        let iv = "0000000000000000"
        let encryptedAccount = try! account?.aesEncrypt(key:key, iv: iv)
        let encryptedPassword = try! password?.aesEncrypt(key:key, iv: iv)

        //result here ------------------------------
        print( "encryptedAccount: " + encryptedAccount! )
        print( "encryptedPassword: " + encryptedPassword! )
   }
}



extension String {

    func aesEncrypt(key: String, iv: String) -> String? {
        var result: String?
        do {
          // 用UTF8的编碼方式將字串轉成Data / use Data func for a UT8 string
          let data: Data = self.data(using: String.Encoding.utf8, allowLossyConversion: true)!

          // 用AES的方式將Data加密 / use AES to encrypt Data
          let aecEnc: AES = try AES(key: key, iv: iv, blockMode: .CBC, padding:PKCS7())
          let enc = try aecEnc.encrypt(data.bytes)

          // 使用Base64編碼方式將Data轉回字串 / use Base64 to encode string
          let encData: Data = Data(bytes: enc, count: enc.count)
          result = encData.base64EncodedString()
       } catch {
        print("\(error.localizedDescription)")
       }

      return result
}

最佳答案

在Android上使用Java 8。
在Android机器上安装Java Cryptography Extension
检查Base64类。
在这里测试:http://aesencryption.net
检查哪个位兼容。
检查密钥大小。
测试技巧:在三个平台上使用相同的(iv)初始化向量和密钥从一个平台加密,在另一个平台上尝试解密使用harcdoded加密解密文本。

10-07 19:05
查看更多