- 실패 처리 정책 개선: encrypt/hash 실패 시 예외 처리 추가

- decrypt 실패 시 입력 반환 및 경고 출력 방식 도입
- 실패 처리 관련 README 및 szRevision 최신화
This commit is contained in:
Rinjae
2026-08-05 17:42:34 +09:00
parent c86c980b43
commit 8335fd9159
2 changed files with 71 additions and 10 deletions
+12 -2
View File
@@ -81,7 +81,7 @@ java -jar damo-manager.jar
damo> enc hello
aGVsbG8=
damo> info
mode=FAKE revision=20260604 returnCode=0
mode=FAKE revision=20260805 returnCode=0
damo> quit
# 파라미터식: 1회 실행
@@ -101,6 +101,11 @@ java -Ddamo-manager.enabled=true -jar damo-manager.jar enc "hello" # scpdb 있
# 운영: real 강제 (scpdb 없으면 기동 실패)
java -Ddamo-manager.require-real=true -jar damo-manager.jar info
# decrypt 실패 폴백: 암호문이 아닌 입력은 그대로 에코되고 stderr 에 경고(마스킹) 출력
java -Ddamo-manager.enabled=true -jar damo-manager.jar dec 'not-real-cipher=='
# stdout: not-real-cipher==
# stderr: [damo-manager] WARN decrypt failed in fake mode; returning input as-is ...
```
명령: `enc|encrypt`, `dec|decrypt`, `sha256|hash256`, `sha512|hash512`, `info|mode`, `help|?`, (대화식) `quit|exit`. 알 수 없는 명령은 stderr 안내 후 exit code 2.
@@ -240,6 +245,11 @@ int rc = damo2.getReturnCode(); // 0: 성공, -1:
| `String decrypt(String b64)` | `ScpDecB64(INI_FILE, "KEY1", b64, "UTF-8")` | `new String(Base64.decode(b64), "UTF-8")` | 입력 그대로 |
| `String hash(int type, String src)` | `ScpHashB64(INI_FILE, type, src)` | `MessageDigest(SHA-256/512).digest(src) → Base64` | `src` (원문) |
**실패 처리 정책** (bypass 는 실패 경로 없음):
- `decrypt` 실패(real 예외·빈 결과, fake Base64 디코딩 실패): **입력을 그대로 반환**하고 `returnCode=-1`, System.err 에 경고(입력은 앞 3자+길이만 마스킹 출력). 실패 원인은 대부분 "입력이 암호문이 아님"(레거시 평문이 Base64 형식으로 오판)이므로 원문을 보존해야 호출 측 평문 폴백/재암호화가 동작한다. 빈 문자열 반환은 오판된 평문을 빈 값으로 만들어 데이터 파괴로 이어진다.
- `encrypt`/`hash` 실패(real 예외·빈 결과): **`IllegalStateException` throw.** 암호화/해시 실패는 시스템 장애(ini/키/에이전트)이며, 빈 문자열을 조용히 반환하면 빈 비밀번호/빈 암호문이 DB에 저장되므로 저장 자체를 실패시킨다.
해시 `type` 상수:
| 상수 | 값 | 알고리즘 |
@@ -282,7 +292,7 @@ gradle runFakeSmoke # -Ddamo-manager.enabled=true (fake)
...
============================================================
revision = 20260604
revision = 20260805
bypassMode = false
fakeMode = true
encrypt = aGVsbG8sIOuLpOuqqA==