투케이2K

103. (Flutter/플러터) [Mac] : [Dart] : 다트 - [encrypt] AES128 CBC 모드 인코딩 (encode) 및 디코딩 (decode) 수행 실시 본문

Flutter

103. (Flutter/플러터) [Mac] : [Dart] : 다트 - [encrypt] AES128 CBC 모드 인코딩 (encode) 및 디코딩 (decode) 수행 실시

투케이2K 2024. 6. 2. 10:26

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Dart

 

[소스 코드]

import 'package:flutter/material.dart';
import 'dart:developer';
import 'dart:core';
import 'dart:convert';
import 'dart:typed_data';
import 'package:crypto/crypto.dart';
import 'package:encrypt/encrypt.dart' as encrpyt;


// -----------------------------------------------------------------------------------------
// TODO [main] : [application 의 진입점 역할]
// -----------------------------------------------------------------------------------------
void main() async {

  /**
   * ------------------------------------------------
   * [요약 설명]
   * ------------------------------------------------
   * 1. 필요 import :
   *
   * import 'package:encrypt/encrypt.dart';
   * ------------------------------------------------
   * 2. 패키지 및 라이브러리 설치 방법 참고 사이트 :
   *
   * https://blog.naver.com/kkh0977/223466273290
   * ------------------------------------------------
   * 3. encrypt 라이브러리 설치 사이트 :
   *
   * https://pub.dev/packages/http/install
   * ------------------------------------------------
   * 4. aes 암호화 : 비밀키 방식으로 인코딩, 디코딩 시 비밀키를 사용합니다
   * ------------------------------------------------
   * 5. aes 128 : 비밀키 값이 16 바이트 값입니다
   * ------------------------------------------------
   * 6. aes 192 : 비밀키 값이 24 바이트 값입니다
   * ------------------------------------------------
   * 7. aes 256 : 비밀키 값이 32 바이트 값입니다
   * ------------------------------------------------
   * 8. 필요 시 추가 lv 설정을 할 수 있으며, lv  바이트 배열값은 16 바이트 고정입니다
   * ------------------------------------------------
   * */

  // [로직 처리 수행]
  try {

    // [AES 암호화에 사용될 데이터 지정]
    var data = "hello";


    // [AES 암복호화에 사용될 key , iv 정의]
    final key = encrpyt.Key.fromUtf8("0123456789abcdef"); // 키 길이 - 16 byte
    //final iv = encrpyt.IV.allZerosOfLength(16); // IV - 16 byte (0 채우기)
    final iv = encrpyt.IV.fromUtf8("0123456789abcdef"); // IV - 16 byte (값 지정)


    // [Encrypter 지정 : cbc 모드 사용]
    final encrypter = encrpyt.Encrypter(encrpyt.AES(key, mode: encrpyt.AESMode.cbc)); // cbc 모드 사용


    // [AES 암호화 수행]
    final encrypted = encrypter.encrypt(data, iv: iv); // 암호화 (byte)
    final base64Encode = encrypted.base64; // 암호화 (base64)


    // [AES 복호화 수행]
    //final decrypted = encrypter.decrypt(encrypted, iv: iv); // 복호화 (byte)
    final decrypted = encrypter.decrypt64(base64Encode, iv: iv); // 복호화 (base64)


    // [로그 출력]
    log("");
    log("-------------------------------------------------------");
    log("String :: ${data}");
    log("-------------------------------------------------------");
    log("AES Encode :: ${base64Encode}");
    log("-------------------------------------------------------");
    log("AES Decode :: ${decrypted}");
    log("-------------------------------------------------------");
    log("");

  }
  catch (e) {
    log("");
    log("-------------------------------------------------------");
    log("Catch :: ${e}");
    log("-------------------------------------------------------");
    log("");
  }

}
 

[결과 출력]


반응형
Comments