Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加密(cryptojs)-解密(.NET)_Javascript_.net_Cryptojs - Fatal编程技术网

Javascript 加密(cryptojs)-解密(.NET)

Javascript 加密(cryptojs)-解密(.NET),javascript,.net,cryptojs,Javascript,.net,Cryptojs,密码将使用AES在.NET中加密并存储在数据库中。在另一个应用程序中,使用javascript(Rhino引擎之上)和cryptojs库,我需要解密密码,然后使用它 解决方案不需要很复杂,我所寻求的只是一个简单的实现,如何让这两个人一起工作 遵循本指南: 在.NET中成功地用一个密钥(“key”)加密了一个简单字符串(“SFTPPass”),但一旦我开始用javascript解密,我就不知道该怎么做了 这是我在javascript中的内容: var encryptedPass = 'StrmZO

密码将使用AES在.NET中加密并存储在数据库中。在另一个应用程序中,使用javascript(Rhino引擎之上)和cryptojs库,我需要解密密码,然后使用它

解决方案不需要很复杂,我所寻求的只是一个简单的实现,如何让这两个人一起工作

遵循本指南:

在.NET中成功地用一个密钥(“key”)加密了一个简单字符串(“SFTPPass”),但一旦我开始用javascript解密,我就不知道该怎么做了

这是我在javascript中的内容:

var encryptedPass = 'StrmZO1Vjd8noHYzXs8hiQQBQDJZA5Bpg3t4BcmrViU=';

var iv = CryptoJS.enc.Base64.parse('1Ph1oX+N+q/kzpdyaIKBpA==');
var key = CryptoJS.enc.Base64.parse('k/W+Xeenh3kSLneZ/DYXVpvshGbsFVdyfOFdFTJb1yE=');

var SFTPPass = CryptoJS.AES.decrypt(encryptedPass, 'Key', key, {iv: iv});
但是,当我将输出写入文件时,它是空的

欢迎提出任何建议或其他解决方案

编辑: 根据alancnet的推荐,我现在得到了输出,但字符串与原始字符串“1234”不匹配。因此,我按照上面链接中的指南,使用相同的关键词和输入字符串,一直到连线。使用.NET中的BitConverter.toString捕获密钥和iv的十六进制

key = "752DA9F0D612540EEF1DE07A144781261A3D604DE339174ADAC5D5D6A695ABFF"
iv = "9714413594225F1D14FA02101C0D584D"
我的javascript现在是什么样子:

var encryptedPass = 'Ao5ZnFYo344iWqv/Jr9euw==';

var iv = CryptoJS.enc.Hex.parse('9714413594225F1D14FA02101C0D584D');
var key = CryptoJS.enc.Hex.parse('752DA9F0D612540EEF1DE07A144781261A3D604DE339174ADAC5D5D6A695ABFF');

var decryptedString = CryptoJS.AES.decrypt(encryptedPass, key, {iv: iv});
您的代码:

var SFTPPass = CryptoJS.AES.decrypt(encryptedPass, 'Key', key, {iv: iv});
“Key”
是意外参数,应删除

我已将您的代码移植到节点:

var CryptoJS = new require("cryptojs").Crypto;

var encryptedPass = 'StrmZO1Vjd8noHYzXs8hiQQBQDJZA5Bpg3t4BcmrViU=';

var iv = CryptoJS.util.base64ToBytes('1Ph1oX+N+q/kzpdyaIKBpA==');
var key = CryptoJS.util.base64ToBytes('k/W+Xeenh3kSLneZ/DYXVpvshGbsFVdyfOFdFTJb1yE=');

var SFTPPass = CryptoJS.util.bytesToBase64(
        CryptoJS.AES.decrypt(
            encryptedPass, 
            key, 
            {
                iv: iv, 
                asBytes: true
            }
        )
    );

console.log(SFTPPass);
它输出:
UABfRxZLApVrt/t8JtoHMhCxfYUPWDwMLuBmWe50tDw=


祝你好运:)

我弄明白了,这是我输出解密字符串的格式

玩过多个版本

 FileWrite(decryptedString);
 FileWrite(decryptedString.toString());
最终,它成功的原因是:

 FileWrite(decryptedString.toString(CryptoJS.enc.Utf8));
请注意小写的“t”和“f”,尝试使用“UTF8”,它也给了我完全不同的输出


再次感谢alancnet指出了我在尝试使用无效参数时犯的主要错误,我可能直到今天晚些时候才注意到这一点。

请说明您是如何输出到文件的。这将很难解释。所以我使用的是一个单独的应用程序(使用Rhino作为脚本引擎),它是用Java构建的。在这个应用程序中,他们使用了一个名为“文件编写器”的选项,我给它一个字符串(sftpass),它会自动处理写入文件的细节。该程序称为“欢乐连接”。编辑:现在我想起来了,你是说我是如何从.NET输出的吗?我怀疑它在做什么,但失败在于写文件。有没有办法在这里注入自己的代码,然后输出到其他地方?或者您可以调试它并在断点处检查变量吗?您可以澄清一下,我们讨论的是来自.NET还是来自JavaScript的输出吗?在JavaScript中。你能直接检查SFTPASS的价值吗?是的,我犯了个愚蠢的错误。我更新了我的原始帖子,请随意尝试我发布的值,看看您是否仍能获得预期的输出。您是否能够输出原始字符串(即“1234”)而不是base64字符串?您可以
新建缓冲区(字节)。toString()
,但当我这样做时,我得到了jibberish。这意味着这些值不正确,但代码是有效的。你的老朋友的向上箭头和绿色复选标记怎么样?我正在努力提高这里的代表性:)当我有足够的代表性分数时,我一定会回来做这件事,我只有11分(是啊,我终于够了。