首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CryptoSwift AES128 128-CBC与Swift

CryptoSwift AES128 128-CBC与Swift
EN

Stack Overflow用户
提问于 2016-02-25 16:10:14
回答 1查看 6.9K关注 0票数 1

在解密AES128CBC加密的JSON时,我得到了这个错误:

断言失败:块大小和初始化向量必须相同长度!:iOS/CryptoSwift/Sources/CryptoSwift/AES.swift,第97行的文件#####

我使用的是CryptoSwift框架和最新的Xcode。

我的方法:

代码语言:javascript
运行
复制
func aes128(key: String, iv: String) throws -> String?{
        if let aes: AES = try AES(key: key, iv: iv, blockMode: .CBC){
            if let encrypted: [UInt8] = try aes.encrypt([UInt8](self.utf8), padding: PKCS7()){
                return String(data: NSData.withBytes(encrypted), encoding: NSUTF8StringEncoding)
            }
        }

        return nil
}

呼叫:

代码语言:javascript
运行
复制
do{
    print(try dataStr.aes128("8e0c0e73f97f2eb386ad75ba86051334", iv: "aa17ffc4ea4b1eac8fa0b56872f34e5f"))   
}catch{

}
EN

回答 1

Stack Overflow用户

发布于 2016-02-25 19:29:35

我的方法:

代码语言:javascript
运行
复制
func aes128(key: [UInt8], iv: [UInt8]) throws -> String?{
    let data = NSData(base64EncodedString: self, options: NSDataBase64DecodingOptions(rawValue: 0))
    let dec = try AES(key: key, iv: iv, blockMode:.CBC).decrypt(data!.arrayOfBytes(), padding: PKCS7())
    let decData = NSData(bytes: dec, length: Int(dec.count))
    let result = NSString(data: decData, encoding: NSUTF8StringEncoding)
    return String(result!)
}

呼吁:

代码语言:javascript
运行
复制
do{
    let secret: [UInt8] = self.getAuthSecret(.LoginSecret)!.byte
    let ivSlice = secret[0..<16]
    let ivArray = Array<UInt8>(ivSlice)

    let keySlice = secret[16..<32]
    let keyArray = Array<UInt8>(keySlice)

    print(try dataStr.aes128(keyArray, iv: ivArray))
}catch{

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35632521

复制
相关文章

相似问题

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