无法将加密数据转换为String

时间:2017-01-14 14:01:21

标签: swift encryption

我正在尝试学习使用RNCryptor。这是我正在使用的:

let key = "1234"
let original_text = "hello"
let data = original_text.data(using: .utf8)!
let encrypted_data = RNCryptor.encrypt(data: data, withPassword: key)

print(String(data: encrypted_data, encoding: .utf8))

这打印' nil'。如何将encrypted_data转换为字符串?

此外, 工作:

try! print(String(data: RNCryptor.decrypt(data: encrypted_data, withPassword: key), encoding: .utf8))

但这是原始文本,而不是密文。

1 个答案:

答案 0 :(得分:5)

加密数据是二进制blob,在大多数情况下是有效的 UTF-8序列。因此转换为字符串

String(data: encrypted_data, encoding: .utf8)

失败并返回nil。如果你想要一个字符串表示 加密数据,然后您可以使用(例如)Base64编码:

print(encrypted_data.base64EncodedString())

或使用

extension Data {
    func hexEncodedString() -> String {
        return map { String(format: "%02hhx", $0) }.joined()
    }
}
来自How to convert Data to hex string in swift

,作为十六进制编码的字符串:

print(encrypted_data.hexEncodedString())