在JavaScript中加密和C#解密

时间:2009-09-23 23:44:16

标签: c# javascript encode decode rijndaelmanaged

我正在寻找在C#中加密字符串并使用JavaScript解密它的方法。在这种情况下,JavaScript是内部系统的脚本语言,所以我不应该担心人们访问解密所需的私钥/密码。

在线搜索解决方案似乎AES加密应该可以解决问题。我调查了slowAES and RijndaelManaged solution,但没有运气让它发挥作用。

我使用了Cheeso提供的C#代码并收到了相同的密文。但是,当我尝试使用slowAES加密同一条数据时,我收到了完全不同的密码。

var testString = new Array("w", "a", "t", "s", "o", "n", "?");
var test = slowAES.encrypt(testString, slowAES.modeOfOperation.CBC, "12345678901234567890123456789012", slowAES.aes.keySize.SIZE_256, new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
alert(test.cipher);

有人能指出我正确的方向吗?我不关心这个方法,只要我能达到效果。我的目标是以URL为例:

www.test.com/clientid=123

使用.NET(C#)将其加密为

www.test.com/clientid=asdf;lkjsxd;flkjq934857u9duhfgkjhgalsdkjfh

然后使用JavaScript将其转换回

www.test.com/clientid=123

谢谢, ITRushn

3 个答案:

答案 0 :(得分:0)

加密/解密操作发生在二进制数据上。因此,您必须在C#和javascript之间保留该二进制数据。将输出编码为base64或十六进制字符串可能是最好的方法。

答案 1 :(得分:0)

选项1

如果您的唯一目的是保护服务器和客户端之间的敏感数据,这是一个已解决的问题,请使用SSL。

选项2

  • 给出网址www.test.com/clientid=123

  • 使用.NET(C#)对其进行加密并指向其他位置: www.mywebserver.com/forward.aspx?url=asdf;lkjsxd;flkjq934857u9duhfgkjhgalsdkjfh

  • 然后在forward.aspx页面中,解密并重定向到www.test.com/clientid=123

  • 然后客户端遵循HTTP重定向和perst -o-done。没有共享密钥,易于实现,只是工作。

注意:

至于原始解决方案,如果没有COM或其他一些互操作方式,就无法安全地完成。我这说的原因是JScript需要访问公钥/私钥对,据我所知,这是不可能的。如果没有公钥/私钥,服务器将需要与客户端共享对称密钥。无法安全地传输此密钥,您无法保护数据,只会对其进行模糊处理。

我认为最简单的方法是使用SSL,然后使用转发URL。

答案 2 :(得分:-5)

我设法使用RC4加密解决了我的问题。您可以在blog上获得有关实施的更多信息。