0

背景

我有在客户端使用 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');
        }
    },

完整的源代码可以在这里找到

我不确定问题是什么。我也愿意接受有关如何在 Javascript 和 C# 之间加密/解密数据的建议。

4

2 回答 2

1

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

SlowAES 并没有真正处理基于密码的密钥派生。如果您需要(可能),那么我建议Parvez Anandam 的 PBKDF2 实现我也用过,效果很好。

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

不要被“slowAES”这个名字吓到——它并不慢。它被命名为“慢”,因为它是 Javascript。

如果您不能使用像 slowAES 这样干净且兼容的东西,那么在尝试 jsc 编译器之前,我建议将现有的 javascript 代码打包到Windows Script Component中。WSC 允许您将脚本逻辑打包为 COM 组件,在其中它可以被任何支持 COM 的环境(包括任何 .NET 应用程序)使用。这是一篇文章,展示了如何将 slowAES 打包为 WSC

出于某种原因,没有多少人知道您可以将脚本代码打包为 COM 组件,但它已经存在 10 年了。这对您来说可能听起来很不寻常,但它胜过做移植。WSC 中的代码是 Javascript,而不是 Javascript.NET。

于 2009-07-30T03:05:03.893 回答
1

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

于 2009-11-09T03:33:45.893 回答