如何在iOS Swift 3.1 中将字符串转换为 32 字节的数据
How to convert string to data with 32 bytes count in iOS Swift 3.1
如何在 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]
那是一个Base64 encoded string, and 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) { ... }
下面的函数将为您提供从您的密钥字符串生成的 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
}
如何在 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]
那是一个Base64 encoded string, and 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) { ... }
下面的函数将为您提供从您的密钥字符串生成的 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
}