首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加密(加密)-解密(.NET)

加密(加密)-解密(.NET)
EN

Stack Overflow用户
提问于 2014-02-27 15:47:54
回答 2查看 3.9K关注 0票数 3

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

解决方案不需要复杂,我想要的只是一个简单的实现,我可以让这两个人一起工作。

遵循本指南:http://www.aspsnippets.com/Articles/AES-Encryption-Decryption-Cryptography-Tutorial-with-example-in-ASPNet-using-C-and-VBNet.aspx

成功地用.NET中的密钥(" key ")加密了一个简单的字符串(“.NET”),但是一旦我在javascript中解密,我就不知道该如何做了。

以下是我在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“不匹配。因此,我使用相同的关键字短语和输入字符串,遵循上面链接中的指南,直到连线。使用BitConverter.toString在.NET中捕获两个键的十六进制& iv。

代码语言:javascript
复制
key = "752DA9F0D612540EEF1DE07A144781261A3D604DE339174ADAC5D5D6A695ABFF"
iv = "9714413594225F1D14FA02101C0D584D"

我的javascript现在看起来是什么样子:

代码语言: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});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-27 17:01:21

你的代码:

代码语言:javascript
复制
var SFTPPass = CryptoJS.AES.decrypt(encryptedPass, 'Key', key, {iv: iv});

'Key'是一个意外的参数,应该删除。

我将您的代码移植到Node:

代码语言:javascript
复制
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=

祝你好运:)

票数 3
EN

Stack Overflow用户

发布于 2014-02-27 18:20:33

我想出来了,这是我输出解密字符串的格式。

玩多种版本..。

代码语言:javascript
复制
 FileWrite(decryptedString);
 FileWrite(decryptedString.toString());

最终起作用的是:

代码语言:javascript
复制
 FileWrite(decryptedString.toString(CryptoJS.enc.Utf8));

请注意"t“和"f”的小写,试着做"UTF8“,它也给了我完全不同的输出。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22073453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档