swift - 将数组 Int8 转换为 base64?
问题描述
我正在TripleDES
与IDZSwiftCommonCrypto
图书馆一起使用。
加密文本时,它TripleDES
返回 UInt8 类型的字节数组。
如何将此数组cipherText转换为 base64,反之亦然以在服务中传输。当我尝试使用 String 类将cipherText转换为字符串时,返回nil。
import UIKit
import IDZSwiftCommonCrypto
let s = "0eXAiOiJKV1QiLCJhbGciOiJIUzI8"
var md5s2 : Digest = Digest(algorithm:.md5)
md5s2.update(s)
let digests2 = md5s2.final()
let algorithm = Cryptor.Algorithm.tripleDES
var iv = try! Random.generateBytes(byteCount: algorithm.blockSize())
var key = arrayFrom(hexString: hexString(fromArray: digests2))
var plainText = "test"
var cryptor = Cryptor(operation:.encrypt, algorithm:algorithm, options:.PKCS7Padding, key:key, iv:iv)
var cipherText = cryptor.update(plainText)?.final()
var decryptedString2 = String(bytes: cipherText!, encoding: .utf8) // Return nil
cryptor = Cryptor(operation:.decrypt, algorithm:algorithm, options:.PKCS7Padding, key:key, iv:iv)
var decryptedPlainText = cryptor.update(cipherText!)?.final()
var decryptedString = String(bytes: decryptedPlainText!, encoding: .utf8) // Return 'test'
解决方案
你可以这样做:
let ints : [UInt8] = [1,2,3,4]
let data = Data(ints)
let base64String = data.base64EncodedString() // As a String
我你更喜欢你可以直接在Data
:
let base64Data = data.base64EncodedData() // As Data
推荐阅读
- mysql - Docker Mysql 容器因“未知数据库”错误而失败(Ubuntu)
- python-3.x - 如何在 TensorFlow 中访问数据集的特征字典
- bash - 如何从自定义行开始循环遍历bash中的文件?
- google-cloud-platform - GCP 授予服务帐户使用 Deployment Manager 写入 GCS 存储桶的权限
- ruby-on-rails - Rails:Url 参数覆盖表单后参数
- python - jinja2.exceptions.TemplateSyntaxError: 意外字符'&'
- python - Python 选择向量负分量的综合方法
- rabbitmq - 如何在 Masstransit for Rabbit MQ 中设置队列长度/大小
- mysql - 如何使用多个视图创建临时表
- python - 在目标存储桶具有目录的 s3 存储桶之间复制文件