我有加密和解密方法,使用C#加密和解密方法测试的加密方法工作正常,在android中也可以正常工作,但在快速解密方法中不起作用,它向我显示空,我尝试了很多次但没有成功,有人帮助我解决这个问题,非常感谢,因为。 我是斯威夫特的新手
纯字符串 = "5lg3yg7Q+Y8=">
func tripleDesDecrypt(PlainString :String) -> String? {
let md5Data = "FIFEDCBA98765432104AABFD"
if let keyData = md5Data.data(using: String.Encoding.utf8),
let data = PlainString.data(using: .utf8),
let cryptData = NSMutableData(length: Int(data.count) + kCCBlockSize3DES) {
let keyLength = size_t(kCCKeySize3DES)
let operation: CCOperation = UInt32(kCCDecrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithm3DES)
let options: CCOptions = UInt32(kCCOptionECBMode + kCCOptionPKCS7Padding)
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(operation,
algoritm,
options,
(keyData as NSData).bytes, keyLength,
nil,
data.bytes, data.count,
cryptData.mutableBytes, cryptData.length,
&numBytesEncrypted)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.length = Int(numBytesEncrypted)
let unencryptedMessage = String(data: cryptData as Data, encoding:String.Encoding.utf8)
return unencryptedMessage
}
else {
return nil
}
}
return nil
}
func tripleDesEncrypt(PlainString: String) -> String{
let md5Data = "FIFEDCBA98765432104AABFD"
// let md5Data = MD5(string:keyvalue)
let PlainStringvar = PlainString
guard let data = PlainStringvar.data(using: .utf8) else {
return ""
}
let cryptData = NSMutableData(length: Int(data.count) + kCCBlockSize3DES)!
let keyLength = size_t(kCCKeySize3DES)
let operation: CCOperation = UInt32(kCCEncrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithm3DES)
let options: CCOptions = UInt32(kCCOptionECBMode + kCCOptionPKCS7Padding)
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(operation,
algoritm,
options,
md5Data.bytes, keyLength,
nil,
data.bytes, data.count,
cryptData.mutableBytes, cryptData.length,
&numBytesEncrypted)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.length = Int(numBytesEncrypted)
var base64cryptString = cryptData.base64EncodedString(options: .lineLength64Characters)
return base64cryptString//// encodeString(str: base64cryptString)
} else {
print("Error: (cryptStatus)")
}
return ""
}
您的数据和加密数据参数在解密函数中以错误的方式出现。首先是 dataIn 值,即加密数据,然后是 dataOut 值,然后是解密数据。它应该如下
let cryptStatus = CCCrypt(operation,
algoritm,
options,
(keyData as NSData).bytes, keyLength,
nil,
cryptData.bytes, cryptData.length,
data.mutableBytes, data.count,
&numBytesEncrypted)