当前位置: 首页 > 知识库问答 >
问题:

令牌解密RSA在本地主机上工作,但在服务器上不工作

萧树
2023-03-14

这是我的第一个问题,也是第一篇英文帖子,请耐心等待。

我正在研究ASP。NET MVC Web Api RESTful应用程序。对于用户身份验证,我想使用加密令牌。我在localhost上工作的想法是:用户请求令牌地址/令牌,在头中包括auth:昵称:passwd,服务器返回加密的令牌,用户将在下一个请求中使用它。所以,用户发送带有头身份验证令牌的请求:encryptedToken,服务器将解密该令牌并对用户进行身份验证。在我的localhost上,一切都很好。上传到服务器后:(ASP.NET 4.0适用于免费用户)我请求我的令牌,服务器使用此令牌响应(现在一切正常),然后我将发出下一个请求,并将我的令牌包含在标头中,服务器尝试解密它,然后它崩溃。我知道,在我设置rsacryptserviceprovider的私钥(在encrypt上设置公钥效果很好)的地方,它会崩溃。以下是我的RSAHeloper代码,我使用它:

public class RSAHelper
{
    private static string _privateKey = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<RSAParameters xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <Exponent>AQAB</Exponent>\r\n  <Modulus>rrEAoxIBFkfvoLr8vvT2Z3CKHKtpXiAPIYKbgtiP/B8YAOhDo1W3dD4MKX05eXn0jFifXBoy2WbGTacE88NocXoSUWVH4a7d3Bm4hfeNawfSSHEpkO0xryU6xF0PdfqO+Vc6y9gajYugUkAdougqaall4TwjsfZ/XUVl6GkTOws=</Modulus>\r\n  <P>zDkpvahctB77Hx/4W1Yfp5rCC3B7rL9CHvf+L1rQdEgooK2NI4Nz6uTixgTTmyRSLRdGLIZRAjAUVFNdYaIbCw==</P>\r\n  <Q>2vsc41/NtLKoCwUtuXyvx4o0c3/RNVLws3VpQ2Ct+2kHt15siO9IwCTTQPgbUi52e8cbh7w3wwWoLwsugAdgAQ==</Q>\r\n  <DP>DcOYhZjQTq9721grQ/SlA4XRqDW3kCf/y9iJACYNwJiQbGvmBEu6x00P36q5nE4xX6qe5ydSVGRrKlfIBmmHiw==</DP>\r\n  <DQ>uhlOo613lGmAhl0QTuK4QEwj50Ro93hVNy5BFxHCyjaoaB3G/1jb6u9g2YYBMgZqiybbLq+2c/cKx3ApRIUAAQ==</DQ>\r\n  <InverseQ>H0BA/DVxNa/JukiqHYe+xuYtblCL04o7pCoAvx/5BFBqHAFOP8Vg0R16WNNoABUGDRTYe7AkWUAquqW9uVWaLw==</InverseQ>\r\n  <D>LGyCtvVrJVlhzMQAZicxShjKZoQIpZENh/4IwfuEkh7uIbzvBmhT4NGukhZwOT4UPGSFEgzvhW2nXDPvBHZa5qT/JknF0juT/B6goa+suMjYupAYk/8oIJuF8ez9MWQ1Blouc+/6Gxoh8tRsRpixoRXbX0kUrz8DdEgjSxp8gAE=</D>\r\n</RSAParameters>";
    private static string _publicKey = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<RSAParameters xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <Exponent>AQAB</Exponent>\r\n  <Modulus>rrEAoxIBFkfvoLr8vvT2Z3CKHKtpXiAPIYKbgtiP/B8YAOhDo1W3dD4MKX05eXn0jFifXBoy2WbGTacE88NocXoSUWVH4a7d3Bm4hfeNawfSSHEpkO0xryU6xF0PdfqO+Vc6y9gajYugUkAdougqaall4TwjsfZ/XUVl6GkTOws=</Modulus>\r\n</RSAParameters>";
    private static UnicodeEncoding _encoder = new UnicodeEncoding();

    public static string Decrypt(string data)
    {
        try
        {
            var bytesCypherText = Convert.FromBase64String(data);

            //rsa.FromXmlString(_privateKey);
            //get a stream from the string
            var sr = new System.IO.StringReader(_privateKey);
            //we need a deserializer
            var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
            //get the object back from the stream
            var privKey = (RSAParameters)xs.Deserialize(sr);
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.ImportParameters(privKey); //-------- here is the problem 
            var bytesPlainTextData = rsa.Decrypt(bytesCypherText, false);

            //get our original plainText back...
            var plainTextData = System.Text.Encoding.Unicode.GetString(bytesPlainTextData);
            return plainTextData;
        }
        catch (Exception)
        {
            throw new RSAException(); 
        }
    }

    public static string Encrypt(string data)
    {
        try
        {
            var rsa = new RSACryptoServiceProvider();
            //rsa.FromXmlString(_publicKey);
            //get a stream from the string
            var sr = new System.IO.StringReader(_publicKey);
            //we need a deserializer
            var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
            //get the object back from the stream
            var pubKey = (RSAParameters)xs.Deserialize(sr);
            rsa.ImportParameters(pubKey);
            var dataToEncrypt = System.Text.Encoding.Unicode.GetBytes(data);
            var bytesCypherText = rsa.Encrypt(dataToEncrypt, false);
            return Convert.ToBase64String(bytesCypherText);

        }
        catch (Exception ex)
        {
            throw new RSAException();
        }
    }

    public class RSAException : Exception
    {
        public RSAException() : base("RSA Encryption Error") { }
    }
}

很抱歉那里有点乱,但是我正在努力解决我的问题,我很绝望。两天后一点进展都没有,仍然是同一个地方的同一个问题!

我尝试了3个教程或提示:http://msdn.microsoft.com/cs-cz/library/system.security.cryptography.rsacryptoserviceprovider(v=vs.110)。aspx

C#RSA加密/解密与传输

如何为asp.netmvc 4 web api进行基于角色的授权

我将非常感谢您的帮助

编辑//经过长时间的谷歌搜索,有一些关于类似问题的帖子。对于私钥,我需要完全信任的权限,实际上我有共享服务器。有什么现代解决方案可以让它在共享服务器下工作吗?关于:

http://www.codeproject.com/Articles/20950/Using-RSA-Public-Key-Encryption-in-a-Shared-Web-Ho
and
http://forums.asp.net/t/983896.aspx

共有1个答案

蓬琦
2023-03-14

所以问题解决了!这里是其他有同样问题的人的解决方案:-)

在我的情况下,共享服务器的管理员是一个通情达理的人,为我设置了更高的信任级别,所以一切都开始工作:-)

对于那些没有设置更高信任级别的选项的人,还有一个非常容易实现的选项:http://www.codeproject.com/Articles/20950/Using-RSA-Public-Key-Encryption-in-a-Shared-Web-Ho它的工作方式与rsacryptserviceprovider相同,包括相同名称的方法。只需将此库添加到项目中,并将rsacryptserviceprovider重命名为EZRSA:)

 类似资料:
  • 我有两个应用程序——基于浏览器的客户端和基于NodeJS的服务器,它们都使用WebSockets进行通信(我使用的是ColyseusJS库)。问题是,当我在本地主机上测试它们时,一切都正常,但当我将应用程序部署到我的Ubuntu VPS服务器时,它停止工作。 我在尝试连接时在浏览器中收到的消息是: 所以它到达服务器(因为当服务器被禁用时,消息是“连接建立中的错误:净::ERR_CONNECTION

  • 我试着简单地在我的路线和渲染产品中获取照片的位置。ejs文件: 它在本地主机上工作,现在我导入我的路由。在real server中的js文件,当我尝试打开产品时,它抛出504错误。 试图按照这个指示,但没有帮助。 获得504GATEWAY_TIMEOUTNodeJs grep-i“504”/var/log/nginx/access。日志 82.135.208.60--[2019年9月16日:07:

  • 我试过这里发布的其他解决方案,但没有任何效果。。 我有下面的代码。htaccess文件。 我收到一封电子邮件,通过点击url,我可以访问注册表。php 我开始登记表格。比如: 有人知道为什么这在本地主机上有效,而在远程服务器上无效吗?

  • LocalHost显示空白页。我将Apache的端口更改为80,当我按下open page时,它会转到localhost/mamp。当我删除/mamp时,我得到的只是一个空白页。我尝试过多种方法,比如关闭mamp,启动它,重新启动我的机器。我已经检查了文件夹设置,一切正常。 我通过创建一个新的文件页索引来测试它。html,它打开的很好。 我不知道它为什么不打开我的索引。php文件。下面是我的php

  • 你好,我有一个我开发的dll。我在使用dll导入的网站中使用此dll。当我通过visual studio运行网站时,一切都正常。但当我用iis运行它时,它没有错误。请参阅所附代码。谢谢在这里输入图像描述

  • 我有一个应用程序,它使用一个在开发环境中工作的数据列表,但在生产环境中返回一个没有查找的空白字段。我想广泛使用datalist,因为它很容易提供一个自动完整的工具,但除非它在生产中工作。 Dev是在Win7下的IE11.0上的MVC VS 2010,在HTML5Test中得分302。产品是服务器2012 R2标准上的IE11.0,报告为Win8.1,在HTML5Test中得分为312分。 经过大量