2017-01-10 284 views
1

我只是RNCryptor的新手,但我得到了一個加密和base64編碼的示例字符串。我正在嘗試使用RNCryptor解密函數以純文本格式查看字符串。使用RNCryptor解密base64編碼和aes加密字符串

我試過如下:

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編碼和加密的事實有關?

密碼無誤。

+2

加密是如何完成的?請注意,RNCryptor具有自己的格式,它被設計爲與RNCryptor加密的數據互操作。 – zaph

回答

3

您的Base-64數據(R79gQDNTt/0+cjU7pduqfA==)不是RNCryptor消息(第一個字節不正確,而且太短)。

AES加密沒有「標準」格式。您必須將解密器與加密器相匹配。 RNCryptor實現了一種特殊的格式,實現了大多數臨時解決方案中缺少的重要安全優勢。如果這些數據來自服務器,那麼您還需要在其中使用RNCryptor實現,或者重寫Swift代碼以實現您的服務器正在使用的任何格式(這看起來像是特定的自定義格式,所以我不能說如何實現)。

+0

我很快就會聯繫到服務器的人,並問他是否使用了RNCryptor。看起來他沒有! – user2363025

+0

只是爲了澄清一個字符串是否用RNCryptor PHP加密,我能用RNCryptor swift解密它嗎? – user2363025

+0

正確; RNCryptor是一種格式。有大約十幾種語言的實現。 –