GASでAESにより暗号化された文字列を復号するマクロを作成する

image

したいこと

・ スプレッドシートに、AESによって暗号化された文字列がある。それを復号化したい。
・ さらに、データがある列分繰り返し、ボタンポチっで実行したい。(おまけ)

マクロを新規作成する

ツールバー > 拡張機能 > Apps Script を選択し、GASの画面にいきます。

ライブラリを導入する

ライブラリの追加からスクリプトIDに、

1IEkpeS8hsMSVLRdCMprij996zG6ek9UvGwcCJao_hlDMlgbWWvJpONrs

を入力し、cCryptoGSを導入します。

このCryptoJS libraries for Google Apps Scriptは、暗号化・複合を手軽に行うためのラッパーです。

復号する関数

以下は引数の暗号化された文字列を、復号し、文字列で返す関数です。
AESなので、暗号化した際の秘密鍵が必要です。

参考 : AESとは?

  function decryptForAES(encryptedMessage) {
    const PASS_PHRASE = "ここに暗号化した時のパスプレーズを入れてください"

    var cipher = new cCryptoGS.Cipher(PASS_PHRASE, 'aes');
    return cipher.decrypt(encryptedMessage);
  }

今回は、関数内で指定していますが、本来は環境変数で指定した方が良いでしょう。

参考 : GASに環境変数を設定する方法

おまけ

以下は、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塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More
U30可茂ITインターンハッカソン

U30可茂ITインターンハッカソン

12月28,29日開催。2日間でアプリ開発の企画から完成までを目指す!U30可茂ITインターンハッカソンを開催します。

Read More

タグ

Flutter (110)初心者向け (28)イベント (18)Google Apps Script (15)Nextjs (12)可茂IT塾 (8)Firebase (7)riverpod (6)React (6)ChatGPT (5)vscode (5)デザイン (5)新卒 (4)就活 (4)Figma (4)Dart (4)JavaScript (4)お知らせ (4)FlutterWeb (3)Prisma (3)NestJS (3)Slack (3)TypeScript (3)ワーケーション (3)インターン (3)設計 (2)線型計画法 (2)事例 (2)Git (2)Image (2)File (2)Material Design (2)画像 (2)iOS (2)アプリ開発 (2)React Hooks (2)tailwindcss (2)社会人 (2)大学生 (2)RSS (1)Google (1)Web (1)CodeRunner (1)個人開発 (1)Android (1)Unity (1)WebView (1)Twitter (1)フルリモート (1)TextScaler (1)textScaleFactor (1)学生向け (1)supabase (1)Java (1)Spring Boot (1)shell script (1)正規表現 (1)パワーポイント (1)趣味 (1)モンスターボール (1)CSS (1)SCSS (1)Cupertino (1)ListView (1)就活浪人 (1)既卒 (1)保守性 (1)iPad (1)シェアハウス (1)スクレイピング (1)PageView (1)画面遷移 (1)flutter_hooks (1)Gmail (1)GoogleWorkspace (1)ShaderMask (1)google map (1)Google Places API (1)GCPコンソール (1)Google_ML_Kit (1)Vercel (1)Google Domains (1)DeepLeaning (1)深層学習 (1)Google Colab (1)コード生成 (1)GitHub Copilot (1)オンラインオフィス (1)オブジェクト指向 (1)クラスの継承 (1)ポリモーフィズム (1)LINE (1)Bitcoin (1)bitFlyer (1)コミュニティー (1)文系エンジニア (1)Freezed (1)permission_handler (1)flutter_local_notifications (1)markdown (1)GlobalKey (1)ValueKey (1)Key (1)アイコン (1)go_router (1)debug (1)datetime_picker (1)Apple Store Connect (1)FlutterGen (1)デバッグ (1)Widget Inspector (1)検索機能 (1)Shader (1)Navigator (1)メール送信 (1)Firebase App Distribution (1)Fastlane (1)Dio (1)CustomClipper (1)ClipPath (1)カスタム認証 (1)アニメーション (1)Arduino (1)ESP32 (1)経験談 (1)フリーランス (1)mac (1)csv (1)docker (1)GithubActions (1)Dialog (1)BI (1)LifeHack (1)ショートカット (1)Chrome (1)高校生 (1)キャリア教育 (1)非同期処理 (1)生体認証 (1)BackdropFilter (1)レビュー (1)getAuth (1)Algolia (1)コンサルティング (1)Symbol (1)

お知らせ

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More
U30可茂ITインターンハッカソン

U30可茂ITインターンハッカソン

12月28,29日開催。2日間でアプリ開発の企画から完成までを目指す!U30可茂ITインターンハッカソンを開催します。

Read More