这种加密方法对Windows App安全吗?

时间:2020-10-29 21:03:50

标签: c# encryption .net-core

我正在创建一个使用OAuth2进行某些REST API调用的库。我想缓存刷新令牌,以便用户不必在每次登录时都重新进行身份验证,尽管我对密码学几乎一无所知。微软文档说,对于像字符串这样的小数据,不对称加密是必经之路。这是我的课程,用于将加密令牌存储在计算机上某个文件的文件中(由调用代码指定)。它有效,我不确定它的安全性。


string _file;
const string _containerName = "MyTokenCache";

public EncryptedTokenCache(string fileLocation)
{
    _file = fileLocation;
}


public void SaveToken(string token)
{
    var rsa = CreateRSAProvider(_containerName);
    var encryptedData = rsa.Encrypt(Encoding.UTF8.GetBytes(token), RSAEncryptionPadding.Pkcs1);
    WriteToFile(encryptedData);
}

public string GetToken()
{
    var rsa = CreateRSAProvider(_containerName);
    var encryptedData = ReadFromFile();
    var decryptedData = rsa.Decrypt(encryptedData, RSAEncryptionPadding.Pkcs1);
    return Encoding.UTF8.GetString(decryptedData);
}


private RSA CreateRSAProvider(string containerName)
{
    CspParameters parameters = new CspParameters
    {
        KeyContainerName = containerName
    };
    return new RSACryptoServiceProvider(parameters);
}

private void WriteToFile(byte[] data)
{
    using(var fs = new FileStream(_file, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
    {
        fs.Write(data, 0, data.Length);
    }
}

private byte[] ReadFromFile()
{
    byte[] data;
    using (var fs = new FileStream(_file, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None))
    {
        data = new byte[fs.Length];
        fs.Read(data, 0, (int)fs.Length);
    }
    return data;
}

1 个答案:

答案 0 :(得分:0)

好吧,这只是RSA / PKCS#1 v1.5加密。原则上,您最好使用OAEP,因为它是:

  1. 可证明的安全性和
  2. 不太容易受到填充oracle攻击的影响。

但是对于存储令牌,PKCS#1 v1.5应该没问题。

此外,您还可以使用使用AES的对称加密,因为您每次创建类时都会创建密钥对。这意味着私钥与公钥在同一位置可用,因此不直接使用非对称加密带来的安全性。也就是说,对于这种特殊用例,我认为没有迫切需要使用AES。

相关问题