使用RNCryptor

时间:2017-01-10 11:08:31

标签: swift encryption swift3 base64 rncryptor

我只是RNCryptor的新手,但我收到了一个加密和base64编码的示例字符串。我正在尝试使用RNCryptor decrypt func以纯文本格式查看字符串。

我尝试了以下内容:

func decryptStr(_ sample : String){

    let sampleBase64Decoded = sample.fromBase64Data()

    do {
        let decryptedNSData = try RNCryptor.decrypt(data: sampleBase64Decoded!, withPassword: "secretPass")
        let decryptedNSString = NSString(data: decryptedNSData, encoding: String.Encoding.utf8.rawValue)
        print("decrypted : \(decryptedNSString)")
    }
    catch let error as NSError {
        print("issue decrypting :\(error.localizedDescription)")
    }

}

我这样称呼它:

decryptStr("R79gQDNTt/0+cjU7pduqfA==")

并且fromBase64看起来像这样:

extension String {

func fromBase64() -> String? {
    guard let data = Data(base64Encoded: self, options: NSData.Base64DecodingOptions(rawValue: 0)) else {
        return nil
    }

    return String(data: data, encoding: String.Encoding.utf8)!
}

}

我收到错误connect.RNCryptor.Error错误2.为什么会这样?它与字符串是基于64位编码还是加密的事实有什么关系?

密码正确。

1 个答案:

答案 0 :(得分:3)

您的Base-64数据(R79gQDNTt/0+cjU7pduqfA==)不是RNCryptor消息(第一个字节不正确,而且它太短)。

没有"标准" AES加密的格式。您必须将解密器与加密器匹配。 RNCryptor实现了一种特定格式,可实现大多数临时解决方案中缺少的重要安全性优势。如果这些数据来自服务器,您也需要在那里使用RNCryptor实现,或者重写您的Swift代码以实现您的服务器使用的任何格式(这看起来像一个特殊的自定义格式,所以我可以&# 39;不要说如何实现这一点。