我正在尝试学习使用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))
但这是原始文本,而不是密文。
加密的数据是二进制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() } }
从如何将数据转换为swift中的十六进制字符串,作为十六进制编码的字符串:
print(encrypted_data.hexEncodedString())