读取跨机器的加密值

时间:2017-10-04 17:28:39

标签: c# .net encryption

我试图以这样的方式写出加密数据:相同的用户帐户(在域上)可以从与编写它的人不同的机器读取数据 - 但只有那个用户可以的。看起来System.Security.Cryptography.ProtectedData类不会那样工作。它是一个命令行工具。

var encryptedData = ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser);

是否有另一种方法可以使用.Net加密数据,以便进行此类访问?

1 个答案:

答案 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;
}