【问题标题】:How can I port a Javascript AES library to .NET to ensure interoperability?如何将 Javascript AES 库移植到 .NET 以确保互操作性?
【发布时间】:2009-07-28 22:56:02
【问题描述】:

背景

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

据我所知,我使用的 javascript AES 库不能与 C# Rijndael 库互操作。

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

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

我知道 jscript 与 javascript 不同,但我希望我可以摆脱一些非常接近的东西,并且只需手动进行修饰。

问题:

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

错误 JS1234:只有类型和包 允许在 a 中定义 图书馆

有问题的行是以下代码行中的第一行:

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# 之间加密/解密数据的建议。

【问题讨论】:

  • 我没有答案,但我很好奇为什么不能只使用 HTTPS 来处理客户端和服务器之间的加密?
  • 很难说问题出在哪里,因为您提供的行没有多大意义,也不是完整的陈述。可以多加几行代码吗?
  • @Alconja:不幸的是,我没有任何控制在客户端和服务器之间使用 SSL。一些客户端会设置 SSL,而其他客户端则不会。因此,所有敏感数据必须在客户端加密才能传输。 @kanngard:好的,我已经更新了,还添加了指向完整 js 文件的链接。谢谢!
  • @Alan: 所有客户端都支持 SSL/TLS。客户端不需要安装任何东西就可以工作。您需要做的就是使用证书设置您的服务器以使用HTTPS
  • @Andrew:谢谢,我知道 SSL/TLS 是如何工作的。当我说我无法控制使用 SSL 时,请相信我。如果您的页面同时包含安全(我的小 javascript)和不安全(客户页面),您将收到一条很好的错误消息。我们有不少客户希望弹出此对话框,并且希望在他们的终端上使用设置 SSL。

标签: c# encryption javascript jscript.net


【解决方案1】:

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

SlowAES 并没有真正处理基于密码的密钥派生。如果你需要(可能)那么我建议the PBKDF2 implementation from Parvez AnandamI also have used that,效果很好。

当我测试结合 Anandam 的 PBKDF2 的 slowAES 时,它在 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。

【讨论】:

  • 感谢您的建议!我最终硬着头皮做港口。令人惊讶的是,它并没有太糟糕,尤其是在调试器的帮助下。我使用了你建议的 WSC 方法,但我害怕性能。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    相关资源
    最近更新 更多