有一个第三方应用程序使用RNCryptor使用 AES256 加密文件,我正在尝试在我的 C# 应用程序中解密这些文件。我得到的只是密钥大小(256)和密码字符串。
以下是文件在发送给我之前的加密方式:
NSData *data = [@"Data" dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSData *encryptedData = [RNEncryptor encryptData:data
withSettings:kRNCryptorAES256Settings
password:aPassword
error:&error];
我仍在学习如何加密/解密,所以我不确定如何处理这个问题。我在这里看到的所有解密示例似乎都需要 IV 和 salt(有时甚至需要密码迭代),但正如您从上面的代码中看到的那样,当文件被加密时,没有提到任何这些事情。
这是我到目前为止所得到的:
public static string DecryptString(byte[] encryptedString, byte[] encryptionKey)
{
using (var provider = new AesCryptoServiceProvider())
{
provider.Key = encryptionKey;
provider.Mode = CipherMode.CBC;
provider.Padding = PaddingMode.PKCS7;
using (var ms = new MemoryStream(encryptedString))
{
byte[] buffer = null;
ms.Read(buffer, 0, 16);
provider.IV = buffer;
using (var decryptor = provider.CreateDecryptor(provider.Key, provider.IV))
{
using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
{
byte[] decrypted = new byte[encryptedString.Length];
var byteCount = cs.Read(decrypted, 0, encryptedString.Length);
return Encoding.UTF8.GetString(decrypted, 0, byteCount);
}
}
}
}
所以我发现我可以从前 16 个字节中获取 IV,但这仍然存在加密密钥的问题,我无法在没有盐值的情况下将其转换为字节。
我感到失落。我在这里做什么?