Notice
Recent Posts
Recent Comments
Link
투케이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("");
}
}
[결과 출력]
반응형
'Flutter' 카테고리의 다른 글
Comments