我在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”,密码为“behdad”(C#),返回加密程序:
“aghft2vvoorlux0ms47k46fg5lqop2yhywq2keikh+MisCDqZfrLF+KsJyBR2EBNC3wQpaKev0X4+9uuC5vliVoHkLsEi6ZI7ZIZ8qVUEkYGQ==”
当我用C#解密时,它返回“ABC”。
但当我将这个base64编码的字符串传递给Swift Decryptor函数时,它返回:
RNCryptorError错误2。
例如:
qrCodeString=“ABC”。
公共静态字符串EncryptQRCode返回=
“AgF6P5Ya0SifSymd3LqKdH+kgmcfobizuhwb6/lfZgAA9N+f5h350meigoko9qgupmxx3x9fxzxwuojodl4is3r62egvzwdjbzjsncef7ouw==”
“msg”是从EncryptQRCode(Base64编码字符串)返回的数据。
pwd=“密码”
编码数据=
由于发生错误,decryptedString和decryptedData没有值。

最佳答案

RNCryptorError错误2
未知主机=2
无法识别的数据格式。通常这意味着数据已损坏。
这意味着传递的数据格式不正确。
我得到的最好的编程建议是一天晚上在电脑房里,当我向里克·卡尔曼求助时,他说:“读一下文档。”
这就是我建议显示输入和输出的原因,你会明白的。
有很多地方需要十六进制来查看发生了什么并进行调试。
在RNCryptor Swift中打开issue以将错误代码添加到文档中。

08-17 02:29