【问题标题】:RC4 encryption/decryption problem in asp.netasp.net中的RC4加密/解密问题
【发布时间】:2011-04-04 07:49:50
【问题描述】:

我在我的应用程序中实现了 RC4 加密/解密,如下所示。 在行尾出现异常。

string sFNToBase64String = Convert.ToBase64String(Encoding.ASCII.GetBytes("Malhotra"));
string sEnFirstName = CommonFunction.RC4EncryptDecrypt(sKey, sFNToBase64String);
//calling webservice
localhost.LoginRequest objRQ = new localhost.LoginRequest();
string sIsValidate = objRQ.ValidateRequest(sEnFirstName); //Exception coming on this line

异常来了

 //Exception coming

    The request failed with HTTP status 400: Bad Request. 
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

    Exception Details: System.Net.WebException: The request failed with HTTP status 400: Bad Request.

我们如何解决它。

------------更新-------

实际上问题仅在于“Malhotra”的加密文本[加密文本:CX±£þÕlêÁ$]。 我认为有一些特殊字符是 Web 服务调用不允许的。

我们如何处理这个问题?

---------------------加密/解密过程-- ----

//Encrypte
string sEnLastName = CommonFunction.RC4EncryptDecrypt(sKey, "Malhotra");
//Encode
string sLNToBase64String = Convert.ToBase64String(Encoding.ASCII.GetBytes(sEnLastName));
//Decode
string sDecodeLastName = Encoding.ASCII.GetString(Convert.FromBase64String(sLNToBase64String));
//Decrypte
string sDeLastName = CommonFunction.RC4EncryptDecrypt(sKey, sDecodeLastName);

【问题讨论】:

  • 异常发生在哪一行?
  • 字符串 sIsValidate = objRQ.ValidateRequest(sEnFirstName);
  • 请查看更新后的问题。

标签: asp.net encryption


【解决方案1】:

第一点 - base64 是一种编码标准,不是加密。

看起来您正在将没有 base 64 编码的加密字符串传递给 Web 服务,这是您的意图吗?

如果可能,我建议尝试更改此设置,以要求将 base 64 编码的字符串传递给 web 服务,并让 web 服务在其工作之前从 base 64 解码回来。

Base 64 只能包含 A-Z、a-z、0-9、+、- 和 = 用于填充。这些字符不会导致您的网络服务出现问题。

【讨论】:

  • 实际上我想通过第 1 步)base64 编码。步骤2)RC4加密字符串到webservice。
  • 如果我通过“Raj”文本代码工作正常。但问题在于“Malhotra”文本。我认为在编码和加密之后,它会生成一个文本,由于某些字符,Web 服务调用不允许这样做。我们可以按照问题中的描述解决这个问题。
  • 正如我所说,base 64 在发送之前对加密字符串进行编码,并让 Web 服务在收到它后从 base 64 解码。 Base 64 编码文本对于跨 Web 服务传递是“安全的”,因为它只包含 ASCII 字符。所以:加密你的字符串,然后对加密的字符串进行编码,将其传递给网络服务;然后 Web 服务对其进行解码并使用加密的字符串。
  • 我以你的方式尝试了步骤1)加密字符串步骤2)编码字符串并使用此值调用Web服务。现在这次 Web 服务调用已完成,但是当我解密 Web 服务方法中的值时,我得到了“Raj”的例外情况,但“Malhotra”没有。即当我通过“Raj”时,我在解密“Raj”后得到,但同样不适用于“Malhotra”
  • 好的,我最好的猜测是您在加密例程中使用的编码与您在 base64 编码中使用的编码不同。 Encoding.ASCII.GetBytes - 例如,尝试更改为 Encoding.UTF32.GetBytes。仔细检查您在加密例程中使用的字符编码,并确保您在需要的任何地方都使用相同的编码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多