如何在iOS Swift 3.1中将字符串转换为32字节数的数据

时间:2017-05-04 08:26:18

标签: ios swift aes nsdata encode

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

2 个答案:

答案 0 :(得分:6)

这是一个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选项以忽略未知 字符(包括行结束字符),如下所示 @升&#39; L&#39; L:

if let keyData = Data(base64Encoded: keyString, options: .ignoreUnknownCharacters) { ... }

答案 1 :(得分:0)

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

<Link to="link#anchor" />