【问题标题】:How to convert string to data with 32 bytes count in iOS Swift 3.1如何在 iOS Swift 3.1 中将字符串转换为 32 字节计数的数据
【发布时间】:2017-10-02 07:44:20
【问题描述】:

如何在 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]

【问题讨论】:

  • 您的密钥字符串长度为 44。
  • String.Encoding(rawValue: String.Encoding.utf8.rawValue)String.Encoding.utf8 相同
  • ...或者在这种情况下,只是.utf8

标签: ios swift aes nsdata encode


【解决方案1】:

这是一个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) { ... }

【讨论】:

  • 另外options:NSData.Base64DecodingOptions.ignoreUnknownCharacters可以在字符串末尾有换行符之类的情况下使用,否则会出错。
  • @l'L'l:是的,取决于字符串的来源,这可能有用。您可以将其缩短为options: .ignoreUnknownCharacters
【解决方案2】:

下面的函数将为您提供从您的密钥字符串生成的 32 字节数据块。当您使用 Common Crypto 库中的 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
}

【讨论】:

    猜你喜欢
    • 2017-10-07
    • 2021-12-30
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多