[flutter] 플러터에서의 파일 및 디렉터리 암호화 방법

플러터는 구글에서 개발한 UI 프레임워크로, 다양한 플랫폼을 대상으로 네이티브 앱을 개발할 수 있는 강력한 기능을 제공합니다. 파일과 디렉터리를 암호화하는 것은 보안 측면에서 매우 중요한 요소입니다. 이번 블로그 포스트에서는 플러터에서 파일과 디렉터리를 암호화하는 방법에 대해 알아보겠습니다.

1. 파일 암호화

플러터에서 파일을 암호화하는 가장 간단한 방법은 flutter_secure_storage 패키지를 사용하는 것입니다. 이 패키지는 데이터를 안전하게 저장하는 데 도움을 주는 다양한 알고리즘을 제공합니다.

먼저, pubspec.yaml 파일에 flutter_secure_storage 패키지를 추가합니다.

dependencies:
  flutter_secure_storage: ^5.0.2

패키지를 설치하려면 터미널에서 다음 명령어를 실행합니다.

flutter pub get

이제 파일을 암호화하려면 다음 코드를 사용할 수 있습니다.

import 'package:flutter_secure_storage/flutter_secure_storage.dart';

void encryptFile() async {
  final storage = FlutterSecureStorage();
  final fileContent = 'This is a sensitive file content';
  final encryptedContent = await storage.write(key: 'encrypted_file', value: fileContent);
  
  print('File encrypted successfully: $encryptedContent');
}

위의 코드 예시에서는 FlutterSecureStorage()의 인스턴스를 생성하고, write 메서드를 사용하여 파일을 암호화하고 저장합니다. 이후 암호화된 파일은 $HOME/.config/flutter_secure_storage 디렉토리에 저장됩니다.

2. 디렉터리 암호화

디렉터리 전체를 암호화하는 경우, encrypt 패키지를 사용할 수 있습니다. 이 패키지는 파일 또는 디렉터리를 암호화 및 복호화하는 데 도움을 줍니다.

pubspec.yaml 파일에 encrypt 패키지를 추가합니다.

dependencies:
  encrypt: ^5.0.1

패키지를 설치하려면 터미널에서 다음 명령어를 실행합니다.

flutter pub get

다음은 디렉터리를 암호화하는 코드 예시입니다.

import 'package:encrypt/encrypt.dart';
import 'dart:io';

void encryptDirectory() {
  final directoryPath = '/path/to/directory';
  final directory = Directory(directoryPath);
  
  if (!directory.existsSync()) {
    print('Directory does not exist');
    return;
  }
  
  final files = directory.listSync(recursive: true);
  
  final key = Key.fromUtf8('my_secret_key');
  final iv = IV.fromLength(16);
  final encrypter = Encrypter(AES(key));
  
  for (var file in files) {
    if (file is File) {
      final fileContent = file.readAsStringSync();
      final encryptedContent = encrypter.encrypt(fileContent, iv: iv);
      
      final encryptedFile = File(file.path + '.encrypted');
      encryptedFile.writeAsStringSync(encryptedContent.base64);
      
      file.deleteSync();
      print('File encrypted successfully: ${file.path}');
    }
  }
}

위의 코드 예시에서는 encrypt 패키지를 사용하여 AES 알고리즘을 통해 디렉터리 내의 각 파일을 암호화합니다. 암호화된 파일은 .encrypted 확장자가 추가된 새로운 파일로 저장됩니다.

3. 참고 자료

위에서 소개한 방법을 사용하여 플러터 앱에서 파일과 디렉터리를 안전하게 암호화할 수 있습니다. 암호화는 사용자 데이터의 안전한 보관을 보장하고, 보안에 대한 사용자 신뢰도를 높이는 중요한 요소입니다.