密码将在 .NET 中使用 AES 加密并存储在数据库中。在另一个应用程序中,使用 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});