C#RSA加密解密私有公开?

这里是我试图解决的问题。 比方说,我被释放建立在ASP.NET MVC和我只是想最终用户能够X用户添加到系统中一些网络软件。 该软件会在自己的服务器上托管。

我想包括一个加密文件,当用户尝试添加新的用户,它超出,并从文件中的加密字符串读取。 当网站解码,明文将允许的用户数。

什么是在我结束加密生成在我结束这个字符串然后将其解码回清除我的应用程序文本的最佳/最简单的方法是什么? 很显然,我希望确保最终用户不能转动了自己的加密字符串,只需更换我的。 我不想担心有试图混淆我的源代码,使他们不能将能够看到我是如何解码的字符串。

是有可能与一个RSA私钥来加密,然后与公共的那个解密? 我还没有运气,在下面的代码:

var rsa = new RSACryptoServiceProvider(); var pubicKey = rsa.ToXmlString(false); var privateKey = rsa.ToXmlString(true); var test = "this string needs to be encrypted then decrypted"; var rsa2 = new RSACryptoServiceProvider(); rsa2.FromXmlString(privateKey); var encryptedBytes = rsa2.Encrypt(Encoding.UTF8.GetBytes(test), false); var encryptedString = Convert.ToBase64String(encryptedBytes); var rsa3 = new RSACryptoServiceProvider(); rsa3.FromXmlString(pubicKey); encryptedBytes = Convert.FromBase64String(encryptedString); var decryptedString = Encoding.UTF8.GetString(rsa3.Decrypt(encryptedBytes, false));

--------------解决方案-------------

您可以使用签名的策略,其中私钥用于生成验证您的信息是真实的签名。

// Create message and signature on your end
string message = "Here is the license message";

var converter = new ASCIIEncoding();
byte[] plainText = converter.GetBytes(secret);

var rsaWrite = new RSACryptoServiceProvider();
var privateParams = rsaWrite.ExportParameters(true);

// Generate the public key / these can be sent to the user.
var publicParams = rsaWrite.ExportParameters(false);

byte[] signature =
rsaWrite.SignData(plainText, new SHA1CryptoServiceProvider());

// Verify from the user's side. Note that only the public parameters
// are needed.
var rsaRead = new RSACryptoServiceProvider();
rsaRead.ImportParameters(publicParams);
if (rsaRead.VerifyData(plainText,
new SHA1CryptoServiceProvider(),
signature))
{
Console.WriteLine("Verified!");
}
else
{
Console.WriteLine("NOT verified!");
}

这个例子主要来自微软的网站复制:

  • RSACryptoServiceProvider.SignData方法(Byte [],对象)

这里是网页,解释的概念:

  • 使用RSA用于邮件签名

我想你要找的是数字签名。 如果内容被加密与否,由于用户拥有的(公共)密钥解密它也没关系。 所有重要的是,如果该内容的来源是你。 既然你有一个配置文件,我认为它是XML,那么你正在寻找XMLDSIG。

您可以使用.NET中的SignedXml类轻松实现这一点。 然后,所有你需要做的是加载配置文件时验证签名。 这种方法可以让你eaisly使用您的任何X509证书。 你甚至可以嵌入在签名文件中的公钥,因此用户并不需要安装证书(公钥)。

你的想法是正确的,但我想知道无法预见的后果。

幽州他们将在自己的服务器上运行的软件,所以这意味着他们正在为自己的托管服务。 但你也提到这一点,服务有连接了TOT他通过互联网与您的服务器验证添加用户。 当网络出现故障或他们希望有一个安全的系统和防火墙阻止网络连接到服务器,会发生什么? 他们将彻底失去了发挥作用的能力?

只是给你一个问题要问自己:P

不要使用公共密钥来“解密”的文件。 可以只使用私钥解密文件。

你的情况,你可以存储用户的数量以及您与您的私钥创建数据的签名。

在客户机上断绝,你用你的公钥来验证签名的文件中的数据(用户数)相匹配

但是,它可能是一个先进的用户可能会掉出您的公钥与自己并签署该文件本身。

由于在这个问题您的评论说,你的方法是使用一个客户的关键,并从自己的关键。 这将无法正常工作,如RSA使用的素数都是为了只用相应的私有/公共密钥的使用。

你需要做的使用两个密钥,并没有从客户端或客户端的两个按键并没有什么你什么。 例如,

  1. 你可以使用你的两个键与你的私人密钥加密,并允许客户使用你的公钥解密签名
  2. 你可以使用客户端的公钥进行加密,并让他们使用自己的(客户端)的私钥解密。

希望这可以帮助!

分类:C# 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.346 (s). 10 q(s)