我试图以这样的方式写出加密数据:相同的用户帐户(在域上)可以从与编写它的人不同的机器读取数据 - 但只有那个用户可以的。看起来System.Security.Cryptography.ProtectedData
类不会那样工作。它是一个命令行工具。
var encryptedData = ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser);
是否有另一种方法可以使用.Net加密数据,以便进行此类访问?
答案 0 :(得分:1)
您可以使用System.Web.Security.MachineKey,但必须确保应用程序在machineKey部分的app.config
/ web.config
个文件中具有相同的配置。它可以在配置中找到:
<configuration>
<system.web>
<machineKey decryption="[type]" decryptionKey="[value]" validation="[value]" validationKey="value" />
如果您配置了asp.net站点,可以使用大量工具生成值,包括IIS。
我在IIS ASP.NET
=&gt;部分中从IIS生成的实际密钥的示例Machine Key
。
static void Main(string[] args)
{
var encrypted = Encrypt("this will be encrypted");
Console.WriteLine("Encrypted base64: " + encrypted);
Console.WriteLine();
var unencrypted = Unencrypt(encrypted);
Console.WriteLine("Decrypted: " + unencrypted);
Console.ReadLine();
}
static string Encrypt(string valueToEncrypt)
{
var toEncrypt = System.Text.Encoding.UTF8.GetBytes(valueToEncrypt);
var encryptedData = System.Web.Security.MachineKey.Protect(toEncrypt, null);
var result = Convert.ToBase64String(encryptedData);
return result;
}
static string Unencrypt(string value)
{
var toUnencrypt = Convert.FromBase64String(value);
var deencryptedData = System.Web.Security.MachineKey.Unprotect(toUnencrypt, null);
var originalValue = System.Text.Encoding.UTF8.GetString(deencryptedData);
return originalValue;
}