【发布时间】:2011-06-18 20:58:42
【问题描述】:
这是我要解决的问题。假设我正在发布一些基于 ASP.NET MVC 构建的 Web 软件,我只希望最终用户能够将 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));
【问题讨论】:
-
该软件正在他们的服务器上运行。如果“他们”确定足以窥视您的源代码以确定许可证文件是如何解码的,那么他们更改您的解码函数以返回他们想要的任何内容都是微不足道的。
-
对……正如我在下面所说的那样。难道不能用私钥加密一些东西,然后只能用它的兄弟公钥解密加密的字符串吗?公钥将保存在他们的服务器上,他们永远无法访问私钥。
-
请告诉我们密钥的托管位置。我猜你的意思是公钥由你的客户端托管,而私钥由你托管?
-
Greglev - 是的,公钥将存在于他们的服务器上。我认为公钥将用于解密用私钥加密的字符串。这样只有那个特定的公钥才能解密字符串。不是这样吗?
-
请查看我作为答案提交的内容,它也解决了您的最后评论。简而言之,事实并非如此。
标签: c# asp.net asp.net-mvc encryption rsa