首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用iv & key和cryptoswift进行AES解密?

如何使用iv & key和cryptoswift进行AES解密?
EN

Stack Overflow用户
提问于 2019-06-20 20:44:18
回答 1查看 4.4K关注 0票数 0

在javascript中使用cryptojs实现,但无法在swift中使用cryptoswift实现。看着下面的代码,我无法理解密钥,iv和密文是如何在javascript中生成的。在Swift中使用cryptoswift做同样的事情。

代码语言:javascript
复制
decryptPayloadQR(ciphertextStr, SecretKey) {

try {
     let key = CryptoJS.enc.Utf8.parse(SecretKey);
     var ciphertext = CryptoJS.enc.Base64.parse(ciphertextStr);
     var iv = ciphertext.clone();
     iv.sigBytes = 16;
     iv.clamp();
     ciphertext.words.splice(0, 4);
     ciphertext.sigBytes -= 16;
     var decrypted = CryptoJS.AES.decrypt({ ciphertext: ciphertext }, key, {
       iv: iv
     });
     console.log("===decrypted.toString(CryptoJS.enc.Utf8)=",decrypted.toString(CryptoJS.enc.Utf8));
     return decrypted.toString(CryptoJS.enc.Utf8);
   } catch (error) {
     console.log("===error in decrpt fun === : ",error);
     return false
   }
 }

结果是字符串,可以转换为json。

下面是Swift代码。

代码语言:javascript
复制
    let encryptedString = "OdqBIN4twOxKwe1aIZhTatkzVdfvN/mfB2Arra38tF25+3efc+Kl+HABZtqiGrTIihSpfW/XHW8+31Rl+uHZB2immfB6/w8E2j5ylCV8RKrqHVMMB7BPBLyr8oTuxmYEla1J1NxywLFPyNZCI4zmkYczwVSyssd5VKWH8WaBHR5Yai6MaxugdohW40byPx6xqbhwjHN5w+dh3dJBSFbM5EhQTqPwfBA1v1UBrCXooay47keSFor/7ywjV3e2bU5JrL0o+S26UF6zoVkRP1tdGAY3TqYyrPLUHVq0nIzkmnZdQk5gFGjN0sF58WdhuqjgRAtSrbmL5biuOtmQHFmNx4sUjkF4pYvfYxrj3ze2H/6G03cxCzW/DUytV678IBrd"

//======== iv & cipher text should be same as generated in above javascript code ==========//
        //======== Should these keys be in hex =======//
        let iv = "" /* No idea how to get iv from encrypted string */
        let cipherText = "" /* No idea how to get cipherText from encrypted string */
        let key = "abababababababab"

        do {
            let decryptor = try AES(key: key, iv: iv)
            let decryptedBytes = try decryptor.decrypt(cipherText.bytes)
            print(String(bytes: decryptedBytes, encoding: .utf8)!)
        } catch {
            print(error)
        }

我如何获取iv,key & cipher text for swift类似于javascript?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-06-21 21:50:45

我可以使用下面的代码在Swift中使用cryptoswift做同样的事情。

代码语言:javascript
复制
let encryptedString = "OdqBIN4twOxKwe1aIZhTatkzVdfvN/mfB2Arra38tF25+3efc+Kl+HABZtqiGrTIihSpfW/XHW8+31Rl+uHZB2immfB6/w8E2j5ylCV8RKrqHVMMB7BPBLyr8oTuxmYEla1J1NxywLFPyNZCI4zmkYczwVSyssd5VKWH8WaBHR5Yai6MaxugdohW40byPx6xqbhwjHN5w+dh3dJBSFbM5EhQTqPwfBA1v1UBrCXooay47keSFor/7ywjV3e2bU5JrL0o+S26UF6zoVkRP1tdGAY3TqYyrPLUHVq0nIzkmnZdQk5gFGjN0sF58WdhuqjgRAtSrbmL5biuOtmQHFmNx4sUjkF4pYvfYxrj3ze2H/6G03cxCzW/DUytV678IBrd"
let aesIVBlockSize = 16

let cipherData = Data(base64Encoded: encryptedString, options: .ignoreUnknownCharacters)
let ivBytes = Array(Array(cipherData!).dropLast(cipherData!.count - aesIVBlockSize))
let actualCipherBytes = Array(Array(cipherData!).dropFirst(aesIVBlockSize))

do {
     let aes = try AES(key: Array("abababababababab".data(using: .utf8)!), blockMode: CBC(iv: ivBytes))
     let decrypted = try aes.decrypt(actualCipherBytes)
     let outData = Data(bytes: decrypted)
     print(outData)
     print(String(bytes: outData, encoding: .utf8) as Any)
   } catch {
     print("Decryption error: \(error)")
   }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56686281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档