- ホーム
- ブログ
- Google Apps Script
- GASでAESにより暗号化された文字列を復号するマクロを作成する
・ スプレッドシートに、AESによって暗号化された文字列がある。それを復号化したい。
・ さらに、データがある列分繰り返し、ボタンポチっで実行したい。(おまけ)
ツールバー > 拡張機能 > Apps Script を選択し、GASの画面にいきます。
ライブラリの追加からスクリプトIDに、
1IEkpeS8hsMSVLRdCMprij996zG6ek9UvGwcCJao_hlDMlgbWWvJpONrs
を入力し、cCryptoGSを導入します。
このCryptoJS libraries for Google Apps Scriptは、暗号化・複合を手軽に行うためのラッパーです。
以下は引数の暗号化された文字列を、復号し、文字列で返す関数です。
AESなので、暗号化した際の秘密鍵が必要です。
function decryptForAES(encryptedMessage) {
const PASS_PHRASE = "ここに暗号化した時のパスプレーズを入れてください"
var cipher = new cCryptoGS.Cipher(PASS_PHRASE, 'aes');
return cipher.decrypt(encryptedMessage);
}
今回は、関数内で指定していますが、本来は環境変数で指定した方が良いでしょう。
以下は、F列に暗号化された文字列があるだけ、それを復号し、その横のG,H,I列に結果を表示するサンプルです。
function decryptDataAndWriteToColumns() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
if (lastRow === 0) return
const dataRange = sheet.getRange(2, 6, lastRow, 1); // F列のデータを含む範囲
const dataArray = dataRange.getValues();
for (let i = 0; i < dataArray.length; i++) {
const fValue = dataArray[i][0];
if (fValue === "") continue
const decryptedMessage = decryptForAES(fValue)
const [ipv4Adress, userId, createdAt] = decryptedMessage.split(',');
sheet.getRange(i + 1, 7).setValue(ipv4Adress);
sheet.getRange(i + 1, 8).setValue(userId);
sheet.getRange(i + 1, 9).setValue(createdAt);
}
function decryptForAES(encryptedMessage) {
const PASS_PHRASE = "XXXXXX"
var cipher = new cCryptoGS.Cipher(PASS_PHRASE, 'aes');
return cipher.decrypt(encryptedMessage);
}
}
このサンプルでは、ipAdress,userId,createAtを暗号化した文字列だと仮定しています。
ですので、暗号元のデータ形式に合わせて、
const [ipv4Adress, userId, createdAt] = decryptedMessage.split(',');
のあたりを調節したり、
このサンプルはF列のものなので、そこら辺もケースに合わせて調節してください。
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More