1

我在 Swift 和 C#.NET 中使用 RNCryptor 。我需要一个跨平台的 AES 加密,因此,我正在使用 RNCryptor。当我在 Swift 中加密一些纯文本时,我可以在 Swift 中正确解密它而不会出现任何错误。但是当我在 C# 中加密一些文本然后我想在 Swift 中解密它时,我收到一个错误“操作无法完成。(RNCryptorError 错误 2。)”

我在 C# 中的代码:

public static string EncryptQRCode(string qrCodeString){
        var qrEncryptor = new Encryptor ();
    return  qrEncryptor.Encrypt (qrCodeString, "password");

    }
public static string DecryptQRCode(string qrEncryptedString){
        var qrDecryptor = new Decryptor();
      return qrDecryptor.Decrypt (qrEncryptedString, "password");
    }

我的 Swift 代码:

func Encrypt(msg:String, pwd:String) -> String{
    let data = msg.dataUsingEncoding(NSUTF8StringEncoding,      allowLossyConversion: false)
    let chiper = RNCryptor.encryptData(data!, password: pwd)
    let base = chiper.base64EncodedDataWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
    let stringBase = String(data: base, encoding: NSUTF8StringEncoding)
    return stringBase!
}
func Decrypt(msg:String, pwd:String) -> String{
    let encodedData:NSData = NSData(base64EncodedString: msg, options: NSDataBase64DecodingOptions(rawValue: 0))!
    do{
        let decryptedData = try RNCryptor.decryptData(encodedData, password: pwd)
        let decrypytedString = String(data: text, encoding: NSUTF8StringEncoding)
        return decryptedString!
    }
    catch let error as NSError{
        print(error.localizedDescription)
        print(error.localizedDescription)
        
    }
    return "AN ERROR OCCURED"

}

例如:

“ABC”,在 C# 中使用密码“behdad”,加密器返回:

"AgHfT2VvVOorlux0Ms47K46fG5lQOP2YhYWq2KeIKh+MisCDqZfrLF+KsJyBR2EBNC3wQpaKev0X4+9uuC5vliVoHkLsEi6ZI7ZIZ8qVUEkYGQ=="

当我在 C# 中解密它时,它返回“ABC”。

但是当我将此 Base64Encoded 字符串传递给我的 Swift Decryptor 函数时,它返回:

RNCryptorError 错误 2。

例如:qrCodeString = "ABC"。公共静态字符串 EncryptQRCode 返回 =

"AgF6P5Ya0SifSymd3LqKdH+kGMCFobiziUhwwB6/lfZgAA9N+F5h350MyigoKo9qgUpMXX3x9FxZXwUOJODL4is3R62EGvZWdJBzjSNCef7Ouw=="

“msg”是从 EncryptQRCode(Base64 编码字符串)返回的数据。

pwd = "密码"

encoded data = <02017a3f 961ad128 9f4b299d dcba8a74 7fa418c0 85a1b8b3 894870c0 1ebf95f6 60000f4d f85e61df 9d0cca28 282a8f6a 814a4c5d 7df1f45c 595f050e 24e0cbe2 2b3747ad 841af656 7490738d 234279fe cebb>

由于发生错误,decryptedString 和 decryptedData 没有值。

4

2 回答 2

1

RNCryptorError 错误 2

UnknownHeader = 2
无法识别的数据格式。通常这意味着数据已损坏。

这意味着传递的数据格式不正确。

我得到的最好的编程建议是有一天晚上在机房里向 Rick Cullman 寻求帮助,他说:“阅读文档。”

这就是为什么我建议显示输入和输出,你会明白的。

有很多地方需要十六进制来查看正在发生的事情并进行调试。

在 RNCryptor Swift 中打开了一个问题,以将错误代码添加到文档中。

于 2016-03-19T21:05:42.003 回答
0

在 C# 中,当你想加密文本时,你必须使用 Schema.V3 进行加密。Swift 中的解密器无法识别 Base 64 编码字符串的架构版本。

string encrypted = encryptor.Encrypt (YOUR_PLAIN_TEXT, YOUR_PASSWORD,Schema.V3);
于 2016-03-21T22:15:10.860 回答