代码之家  ›  专栏  ›  技术社区  ›  user979331

Swift 4将字节数组转换为UIImage

  •  -1
  • user979331  · 技术社区  · 6 年前

    如何在iOS Swift 3中将字符串转换为32字节计数的数据或NSData。
    我有一把这样的钥匙:

    let keyString = "hpXa6pTJOWDAClC/J6POVTjvJpMIiPAMQiTMjBrcOGw=" 
    

    并测试此代码是否转换为数据:

    let keyData: Data = keyString.data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!  
    let keyLength = keyData.count //44
    

    键长为44。
    我需要使用32进行转换,因为有效密钥字节数应等于:16或24或32基于这种情况:

    let validKeyLengths = [kCCKeySizeAES128, kCCKeySizeAES192, kCCKeySizeAES256]
    
    0 回复  |  直到 8 年前
        1
  •  8
  •   Paulo Mattos    8 年前

    那是一个 Base64 编码字符串,以及 Data(base64Encoded:) 可用于对其进行解码,准确给出32个字节:

    let keyString = "hpXa6pTJOWDAClC/J6POVTjvJpMIiPAMQiTMjBrcOGw="
    
    if let keyData = Data(base64Encoded: keyString) {
        print(keyData.count) // 32
        print(keyData as NSData) // <8695daea 94c93960 c00a50bf 27a3ce55 38ef2693 0888f00c 4224cc8c 1adc386c>
    }
    

    这个 .ignoreUnknownCharacters 选项以忽略未知 @l'l'l:

    if let keyData = Data(base64Encoded: keyString, options: .ignoreUnknownCharacters) { ... }
    
        2
  •  0
  •   adamfowlerphoto    8 年前

    下面的函数将为您提供一个由键字符串生成的32字节数据块。当您使用公共加密库中的AES密钥长度时,我假设您可以访问库的其余部分,并且CC_SHA256()将对您可用

    static func sha256Hash(_ string: String) -> Data? {
        let len = Int(CC_SHA256_DIGEST_LENGTH)
        let data = string.data(using:.utf8)!
        var hash = Data(count:len)
    
        let _ = hash.withUnsafeMutableBytes {hashBytes in
            data.withUnsafeBytes {dataBytes in
                CC_SHA256(dataBytes, CC_LONG(data.count), hashBytes)
            }
        }
        return hash
    }