3

パスワードは、AES を使用して .NET で暗号化され、データベースに保存されます。別のアプリケーションでは、javascript (Rhino エンジンの上) と cryptojs ライブラリを使用して、パスワードを復号化してから使用する必要があります。

ソリューションは複雑である必要はありません。私が求めているのは、この 2 人を連携させる方法を簡単に実装することだけです。

このガイドに従いました: http://www.aspsnippets.com/Articles/AES-Encryption-Decryption-Cryptography-Tutorial-with-example-in-ASPNet-using-C-and-VBNet.aspx

.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 の両方の 16 進数をキャプチャしました。

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});
4

2 に答える 2