解密方法无法快速工作



我有加密和解密方法,使用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)

最新更新