背景:
我有数据,我正在客户端用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#之间加密/解密数据提出建议。
答案 0 :(得分:1)
如果你只是想从Javascript做AES,你试过slowAES吗? It worked for me.。我发现slowAES与.NET内置的Rijndael或AES类之间有很好的互操作性。我还发现课堂设计很自然,易于使用和理解。这不需要从Javascript移植到JScript。
基于密码的密钥派生并不是由SlowAES真正处理的。如果您需要(可能),那么我建议the PBKDF2 implementation from Parvez Anandam。 I 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"; } } }