【问题标题】:Decrypt a base64 encoded and aes encrypted string using RNCryptor使用 RNCryptor 解密 base64 编码和 aes 加密的字符串
【发布时间】:2017-01-10 11:08:31
【问题描述】:

我是 RNCryptor 的新手,但我收到了一个经过加密和 base64 编码的示例字符串。我正在尝试使用 RNCryptor 解密函数以纯文本形式查看字符串。

我尝试了以下方法:

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。为什么会这样?这是否与字符串既是 base 64 编码又是加密的事实有任何关系?

密码正确。

【问题讨论】:

  • 加密是如何完成的?请注意,RNCryptor 有自己的格式,旨在与 RNCryptor 加密的数据进行互操作。

标签: swift encryption swift3 base64 rncryptor


【解决方案1】:

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

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

【讨论】:

  • 我会尽快与服务器人员联系,询问他是否使用了 RNCryptor。看起来他一定没有!
  • 只是为了澄清一个字符串是否使用 RNCryptor PHP 加密,我可以使用 RNCryptor swift 对其进行解密吗?
  • 正确; RNCryptor 是一种格式。有大约十几种语言的实现。
猜你喜欢
  • 1970-01-01
  • 2011-04-26
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多