From a7d03a0086c56c592a0ea65fde692e6d5b712a59 Mon Sep 17 00:00:00 2001 From: "Harry M. You" Date: Thu, 4 Dec 2025 16:21:35 +0900 Subject: [PATCH] =?UTF-8?q?=ED=8C=8C=EC=9D=BC=EC=B2=B4=ED=81=AC=20?= =?UTF-8?q?=EA=B3=B5=ED=86=B5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kamcoback/common/utils/FIleChecker.java | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/main/java/com/kamco/cd/kamcoback/common/utils/FIleChecker.java diff --git a/src/main/java/com/kamco/cd/kamcoback/common/utils/FIleChecker.java b/src/main/java/com/kamco/cd/kamcoback/common/utils/FIleChecker.java new file mode 100644 index 00000000..e36f2edd --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/common/utils/FIleChecker.java @@ -0,0 +1,67 @@ +package com.kamco.cd.kamcoback.common.utils; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class FIleChecker { + + public static boolean isValidFile(String pathStr) { + + Path path = Paths.get(pathStr); + + if (!Files.exists(path)) { + return false; + } + + if (!Files.isRegularFile(path)) { + return false; + } + + if (!Files.isReadable(path)) { + return false; + } + + try { + if (Files.size(path) <= 0) { + return false; + } + } catch (IOException e) { + return false; + } + + return true; + } + + + public static boolean verifyFileIntegrity(Path path, String expectedHash) + throws IOException, NoSuchAlgorithmException { + + // 1. 알고리즘 선택 (SHA-256 권장, MD5는 보안상 비추천) + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + + try (InputStream fis = Files.newInputStream(path)) { + byte[] buffer = new byte[8192]; // 8KB 버퍼 + int bytesRead; + while ((bytesRead = fis.read(buffer)) != -1) { + digest.update(buffer, 0, bytesRead); + } + } + + // 3. 계산된 바이트 배열을 16진수 문자열로 변환 + StringBuilder sb = new StringBuilder(); + for (byte b : digest.digest()) { + sb.append(String.format("%02x", b)); + } + String actualHash = sb.toString(); + + return actualHash.equalsIgnoreCase(expectedHash); + } + +}