前提・実現したいこと
GASを使用してDLしたファイルを、そのままGAS上でAES復号化したいです。
DLするファイルはAmazon Selling Partner APIのreport-apiを使用して得られるものです。(DL先URLとkey,ivを与えられている)
発生している問題・エラーメッセージ
復号後の16進文字列が文字にできません。
該当のソースコード
javascript
1const decrypt_test = () => { 2 const url = 'https://tortuga-prod-fe.s3-us-west-2.amazonaws.com/%2FNinetyDays/amzn1.tortuga.3.5d4685fe-cdf1-4f37-8dfc-a25b85468e34.T1J5QXLEXAMPLE'; 3 4 const response = UrlFetchApp.fetch(url); 5 const file = response.getContentText(); 6 7 const key = 'xiZ8FGT6pYo49ZwfvAplJxKgO0qW46Morzs5aEXAMPLE'; 8 const iv = 'aoGh0rhbB3ALlCFKiEXAMPLE'; 9 const enc_key = cCryptoGS.CryptoJS.enc.Base64.parse(key); 10 const enc_iv = cCryptoGS.CryptoJS.enc.Base64.parse(iv); 11 const cipherParams = cCryptoGS.CryptoJS.lib.CipherParams.create({ 12 ciphertext: file//cCryptoGS.CryptoJS.enc.Base64.parse(file) 13 }); 14 15 console.log(`enc_key_length:${enc_key.words.length}`); 16 console.log(`enc_iv_length:${enc_iv.words.length}`); 17 18 const decryptedMessage = cCryptoGS.CryptoJS.AES.decrypt(cipherParams, enc_key, { iv: enc_iv, mode: cCryptoGS.CryptoJS.mode.CBC}).toString(); 19 20 console.log(`decryptedMessage:${decryptedMessage}`); 21 22 return decryptedMessage; 23};
output
12021/06/20 20:04:04 debug enc_key_length:8 22021/06/20 20:04:04 debug enc_iv_length:4 32021/06/20 20:04:04 debug decryptedMessage:bfc095f3ecec221e8585ceb68031078d25112f5f26ea2c1f80470f5f4f19f2e1c2cd94638e8666c3486fa29191b568bcd9e8d5a3bdcbbc05456f0567bb6cdae675fa044f94e560379d16b1d370cd7c4a9c5afbbcf4fde2694ed01c1b7950eaabc65e46c4640d8f0814bfe66e8ae65f7768136ac4615624be25373d665ee8fde82742e26664d7c09c61ac8994dc3052f0f22d5042f0b407d696e3c84a3906350dc60c46001ef7865d0c6594c57c5af22616688e028f52d4f12b538d0580c420fdcb0ee61287d4ee2629cd7d39f739d63e84dd75e948eaffb4383076f0c66997
試したこと
・keyとivを文字列のままparseせずセット
・padingをNoneに設定(modeはCBCで合っているはずです)
・responseの変換。getBlob()したりgetBytes()したり
・出力された16進文字列を色々な文字コードでデコード
・Amazonサポートに問合せ→GASで使えそうな情報は貰えず
補足情報
得たいレポートのサンプルとして以下組合せを記載しておきます。
key='xiZ8FGT6pYo49ZwfvAplJxKgO0qW46Morzs5aaOTy5E=' iv='aoGh0rhbB3ALlCFKiuJj6w==' response.getContentText()='������6F��K���wT�"���j҄)�:�՞+��3�8�f��!��¨Ѷd7�g����G��w��ۙ�wxW<���B#CE���p]�R[�!T�/ �g`�&���C�8� ��d�;�/T���&�ʳ.U�����j%{�#ՋV-�k���p��B9R��쉒��i]�Wb�' response.getBlob().getBytes()=[-57,18,25,-58,21,-23,-97,27,-38,30,-76,-118,54,70,-101,-74,75,-79,-5,15,-52,119,84,-55,7,34,-11,-65,-85,106,-46,-124,27,41,-77,58,-3,-43,-98,43,-99,-17,51,-78,56,-32,102,-15,-62,33,-97,-25,-88,-62,-88,-47,-74,100,55,-61,24,103,-44,-10,-41,-24,-102,71,-64,-107,119,-24,25,-62,-37,-103,-28,-123,119,120,6,87,60,-97,16,-13,-50,66,35,67,69,-91,-23,-28,-68,30,112,93,28,-54,82,91,-22,26,33,84,-34,-67,-100,47,32,-100,103,96,-99,38,-91,-128,14,-93,67,-26,-88,56,-35,32,4,-9,-86,100,-60,59,-7,47,84,-86,-92,-20,38,26,-21,8,-54,-77,46,11,85,-2,-48,8,-117,-55,14,-24,106,37,123,-80,35,-43,-117,30,86,45,-9,107,30,-93,-28,29,-126,112,-97,-103,66,57,82,-62,-13,-20,-119,-110,-127,-15,-76,105,93,-119,87,98,-28,-100]

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/05 13:03