我正在创建一个使用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;
}
答案 0 :(得分:0)
好吧,这只是RSA / PKCS#1 v1.5加密。原则上,您最好使用OAEP,因为它是:
但是对于存储令牌,PKCS#1 v1.5应该没问题。
此外,您还可以使用使用AES的对称加密,因为您每次创建类时都会创建密钥对。这意味着私钥与公钥在同一位置可用,因此不直接使用非对称加密带来的安全性。也就是说,对于这种特殊用例,我认为没有迫切需要使用AES。