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

时间:2009-07-28 22:56:03

标签: c# encryption javascript jscript.net

背景

我有数据,我正在客户端用javascript加密,需要在服务器端解密。

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

因此,我只能在C#中实现javascript AES以供使用。

我将尝试使用jsc.exe将javascript编译成dll,看看反射器是否可以节省一些时间。

我知道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');
        }
    },

完整的来源可以是found here

我不确定问题是什么。我也对如何在Javascript和C#之间加密/解密数据提出建议。

2 个答案:

答案 0 :(得分:1)

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

基于密码的密钥派生并不是由SlowAES真正处理的。如果您需要(可能),那么我建议the PBKDF2 implementation from Parvez AnandamI also have used that,它运作良好。

当我测试slowAES和Anandam的PBKDF2时,它在CBC模式下与C#的RijndaelManaged类很好地互操作。

不要被名字“slowAES”推迟 - 它并不是很慢。它被命名为“慢”,因为它是Javascript。

如果您不能使用像slowAES那样干净且兼容的东西,那么在尝试使用jsc编译器之前,我建议将现有的javascript代码打包成Windows Script Component。 WSC允许您将脚本逻辑打包为COM组件,任何支持COM的环境(包括任何.NET应用程序)都可以使用它。这是a post that shows how to package slowAES as a WSC

由于某些原因,没有多少人知道您可以将脚本代码打包为COM组件,但它已经存在了10年。这对你来说可能听起来很不寻常,但它却在击败端口。 WSC中的代码是Javascript,而不是Javascript.NET。

答案 1 :(得分:0)

我今天也有这个问题。我碰巧偶然发现了解决方案。使用package theNameSpace { class Whatever { function func() { return "the results"; } } }