C# 如何将Javascript AES库移植到.NET以确保互操作性?

C# 如何将Javascript AES库移植到.NET以确保互操作性?,c#,encryption,javascript,jscript.net,C#,Encryption,Javascript,Jscript.net,背景: 我在客户端用javascript加密的数据需要在服务器端解密 据我所知,我使用的javascript AES库与C#Rijndael库没有互操作 因此,我基本上要在C#中实现javascript AES以供使用 我将尝试使用jsc.exe将javascript编译成一个dll,看看reflector能否为我节省一些时间 我知道jscript和javascript不一样,但我希望我能做一些非常接近的工作,只需手动进行润色 问题: 当我使用JSC编译javascript时,出现以下错误: 错

背景

我在客户端用javascript加密的数据需要在服务器端解密

据我所知,我使用的javascript AES库与C#Rijndael库没有互操作

因此,我基本上要在C#中实现javascript AES以供使用

我将尝试使用jsc.exe将javascript编译成一个dll,看看reflector能否为我节省一些时间

我知道jscript和javascript不一样,但我希望我能做一些非常接近的工作,只需手动进行润色

问题:

当我使用JSC编译javascript时,出现以下错误:

错误JS1234:仅类型和包 定义允许在 图书馆

违规行是以下代码行中的第一行:

var GibberishAES = (function(){
    var Nr = 14,
    /* Default to 256 Bit Encryption */
    Nk = 8,
    Decrypt = false,

    enc_utf8 = function(s)
    {
        try {
            return unescape(encodeURIComponent(s));
        }
        catch(e) {
            throw 'Error on UTF-8 encode';
        }
    },

    dec_utf8 = function(s)
    {
        try {
            return decodeURIComponent(escape(s));
        }
        catch(e) {
            throw ('Bad Key');
        }
    },
完整来源可以是:


我不确定是什么问题。关于如何在Javascript和C#之间加密/解密数据,我也愿意听取建议。

如果您只是想从Javascript执行AES,您尝试过吗。我发现slowAES与.NET中内置的Rijndael或AES类之间具有良好的互操作性。我还发现课堂设计很自然,易于使用和理解。这不需要从Javascript移植到JScript

基于密码的密钥派生实际上不是由SlowAES处理的。如果你需要(很可能),我建议,而且效果很好

当我测试slowAES与Anandam的PBKDF2的耦合时,它在CBC模式下与C#的类具有良好的互操作性

不要因为“懒汉”这个名字而感到不快——它并不是很慢。它被命名为“slow”,因为它是Javascript

如果您不能使用像slowAES这样干净且兼容的东西,那么在尝试jsc编译器之前,我建议将现有的javascript代码打包到一个新版本中。WSC允许您将脚本逻辑打包为COM组件,在该组件中,任何支持COM的环境(包括任何.NET应用程序)都可以使用它。给你


出于某种原因,没有多少人知道可以将脚本代码打包为COM组件,但这已经有10年的历史了。对你来说,这可能听起来很不寻常,但总比做端口好。WSC中的代码是Javascript,而不是Javascript.NET

我今天也有这个问题。我碰巧找到了解决办法。使用
package theNameSpace{class which{function func(){return“the results”;}}}}

我没有答案,但我只是好奇,为什么不能使用HTTPS处理客户端和服务器之间的加密?很难说问题出在哪里,因为您提供的行没有多大意义,也不是一个完整的语句。您是否可以添加更多的代码行?@Alconja:不幸的是,我无法控制在客户端和服务器之间使用SSL。一些客户端将设置SSL,而其他客户端则不会。因此,必须在客户端对所有敏感数据进行加密以进行传输@卡恩加德:好的,我已经更新了,还添加了一个指向完整js文件的链接。谢谢@艾伦:所有客户端都支持SSL/TLS。客户端不需要安装任何东西就可以工作。您所需要做的就是使用证书设置您的服务器以使用
HTTPS
@Andrew:谢谢,我知道SSL/TLS是如何工作的。当我说我无法控制使用SSL时,请相信我。如果您的页面既包含安全页面(我的小javascript)又包含不安全页面(客户页面),您将收到一条很好的错误消息。我们有不少客户不希望弹出此对话框,也不希望在他们的终端使用安装SSL。感谢您的建议!最后我咬紧牙关,做了一个港口。令人惊讶的是,这并不太糟糕,尤其是在调试器的帮助下。我使用了您建议的WSC方法,但我担心性能。