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