2) SDF App API 명세서
Java Class API 함수 설명
▶ void SettingPathForProperty() : 설정 정보 파일의 경로를 알려주는 함수
- 제어방식 :
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : 설정 정보 파일의 path를 알려주는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | propertyPath | 설정 정보 파일(softcamp.properties)의 경로를 설정한다. | 파일명 포함 예) c:/softcamp.properties |
Return Value
- 없음
비고
설정 정보 파일을 사용하지 않는 경우, 기본 설정으로 동작하지만 4.x 키 파일을 사용하는 경우, 보안성 강화 기능으로 인하여 반드시 설정 정보 파일을 사용하여야 합니다.
이름 | 설정값 | 설명 | 기본값 |
---|---|---|---|
LogWrite | 0 이면 로그 남기지 않음 | 로그 파일 생성 여부 | 1 |
LogPath | 로그 파일 생성 경로 | 로그 파일 생성 경로 | ./log/ |
FileExt | 구분자는 ‘;’ 이며 소문자 사용 | 지원 확장자 목록 | doc;xls;ppt;csv;hwp;gul;txt;pdf;bmp;jpg;jpeg;gif;tif;tiff;rtf;jtd;pptx;docx;xlsx;tmp |
ServiceID | ID | 키 파일 인증 관련 서비스 ID | |
useServiceLinkerIcon | 0 이면 미사용 | 서비스링커 아이콘 지원 ( SCDSA004 문서는 해당되지 않음 ) | 0 |
nEncCache | 1 이면 Cache Mode | 암호화 시, 대상 파일이 존재하는 경우 파일 암호화 하지 않음 ( MAC 암호화 API만 지원 ) | 0 |
nMaxLoopCache | 1 보다 큰 값 | Cache Mode에서 대기 상태인 경우, 최대 대기 루프 횟수 | 300 |
FileBufferSize | 1 보다 큰 값 | File I/O 시, 읽어들이는 버퍼의 크기 | 65536 |
LogFilter | 구분자는 ‘;’ 사용 | 로그 파일에 남기려는 로그의 종류 | ERROR; INFO; WARNING; |
Algorithm | AES or ARIA | 문서 암호화 시, 사용되는 암호화 알고리즘 (ARIA로 설정 시, 키 알고리즘은 RSA를 사용) | AES |
DocumentVersion | 4 이면, SCDSA004 문서 | 문서 헤더 버전 (Algorithm 설정 값이 AES가 아닌 경우, DocumentVersion 은 4로 설정됨) | 3 |
AnsiCharset | Character Set | 시스템의 기본 Locale과 다른 Character Set을 사용하는 경우 설정 | 시스템의 기본 Locale |
KeyFileOffset | 0 이면 미사용 | 키 파일 메모리 로딩 시, 성능향상을 위하여 키 파일의 일부만을 로딩하여 처리하는 기능 | 4.1.3.0 이전 : 0 4.1.3.0 이후 : 1 |
-
useServiceLinkerIcon 설정 시, 서비스 링커로 암호화 한 파일은 클라이언트에서 붉은 색 아이콘으로 표시 됩니다. ( 클라이언트에서 지원하는 지, 여부를 확인한 후에 설정하시기 바랍니다. )
-
FileBufferSize는 File I/O 성능 향상을 위하여 버퍼를 사용하여 Read/Write 하도록 코드가 수정되었으며, 이 때 버퍼의 크기는 해당 네트웍의 성능에 영향을 받기 때문에 설정 가능합니다. 해당 시스템의 적절한 버퍼 크기는 SCSL.FindBufferSize 클래스로 찾을 수 있습니다.
-
Usage : java -classpath scsl.jar SCSL.FindBufferSize testFile (to execute a jar file) or java SCSL.FindBufferSize testFile (to execute a class)
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
sFile.SettingPathForProperty( "C:\\softcamp\\softcamp.properties" );
/* do working */
}
}
▶ public void SLDsInitDAC() : 초기화 함수
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : 서비스링커를 사용하기 위한 초기화 작업 함수
Parameter
- 없음
Return Value
- 없음
비고
- SLDsAddUserDAC() or SLDsAddGroupDAC()으로 추가된 정보를 초기화
▶ int SLDsAddUserDAC() : 사용자 추가 함수
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : 보안문서의 헤더의 보안정책에 사용자를 추가하는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | userID | 사용자 ID | |
[IN] String | auth | 권한 문자열 | 권한 문자열 참조 https://wiki.softcamp.co.kr/x/ng1YB |
[IN] int/String | expireDate | 유효기간 설정 | int - 0: 기한없음, 1: 당일만, 2: 명일 까지, n: n일까지 String - YYYYMMDD 형식 예) "20231231" |
[IN] int | readLimit | 읽기 횟수 | 0: 읽기횟수 제한 없음, n: 읽기 n회 가능 |
[IN] int | printLimit | 프린트 횟수 | 0: 출력횟수 제한 없음, n: 출력 n회 가능 |
Return Value
- 0 : 성공
- 이외의 값 : 실패
비고
- 없음
▶ int SLDsAddGroupDAC() : 그룹 추가 함수
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : 보안문서의 헤더의 보안정책에 그룹을 추가하는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | groupID | 그룹 ID | |
[IN] String | auth | 권한 문자열 | 권한 문자열 참조 https://wiki.softcamp.co.kr/x/ng1YB |
[IN] int/String | expireDate | 유효기간 설정 | int - 0: 기한없음, 1: 당일만, 2: 명일까지, n: n일까지 String - YYYYMMDD 형식 예) "20231231" |
[IN] int | readLimit | 읽기 횟수 | 0: 읽기횟수 제한 없음, n: 읽기 n회 가능 |
[IN] int | printLimit | 프린트 횟수 | 0: 출력횟수 제한 없음, n: 출력 n회 가능 |
Return Value
- 0 : 성공
- 이외의 값 : 실패
비고
- 없음
▶ int SLDsAddUserDACCL() : User DAC 정보를 추가
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : 보안문서의 헤더의 보안정책에 그룹을 추가하는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | SERVERID | 서버 ID | |
[IN] String | userID | 사용자 ID | |
[IN] String | auth | 권한 문자열 | 권한 문자열 참조 https://wiki.softcamp.co.kr/x/ng1YB |
[IN] int/String | expireDate | 유효기간 설정 | int - 0: 기한없음, 1: 당일만, 2: 명일까지, n: n일까지 String - YYYYMMDD 형식 예) "20231231" |
[IN] int | readLimit | 읽기 횟수 | 0: 읽기횟수 제한 없음, n: 읽기 n회 가능 |
[IN] int | printLimit | 프린트 횟수 | 0: 출력횟수 제한 없음, n: 출력 n회 가능 |
Return Value
- 0 : 성공
- 이외의 값 : 실패
비고
- 없음
▶ public void SLDsInitGrade() : 초기화 함수
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : 서비스링커를 사용하기 위한 초기화 작업 함수
Parameter
- 없음
Return Value
- 없음
비고
- SLDsAddUserGrade() 으로 추가된 정보를 초기화
▶ int SLDsAddUserGrade() : 등급 문서 접근 대상 사용자 추가 함수
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : 보안문서의 헤더의 보안정책에 사용자를 추가하는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | userID | 사용자 ID, 그룹ID, 등급 ID | ** 등급 ID 설정 시 - 유효기간만 설정 가능 - auth 에 0000000 으로 설정 해야 함. |
[IN] String | auth | 권한 문자열 | 권한 문자열 참조 https://wiki.softcamp.co.kr/x/ng1YB |
[IN] int/String | expireDate | 유효기간 설정 | int - 0: 기한없음, 1: 당일만, 2: 명일까지, n: n일까지 String - YYYYMMDD 형식 예) "20231231" |
[IN] int | readLimit | 읽기 횟수 | 0: 읽기횟수 제한 없음, n: 읽기 n회 가능 |
[IN] int | printLimit | 프린트 횟수 | 0: 출력횟수 제한 없음, n: 출력 n회 가능 |
Return Value
- 0 : 성공
- 이외의 값 : 실패
비고
- 없음
예제
SCSL.SLDsFile sFile = new SCSL.SLDsFile();
sFile.SLDsInitGrade();
sFile.SLDsAddUserGrade("0000005", "000000000", "20231231", 0, 0); //등급에 유효 기간 설정
sFile.SLDsAddUserGrade("SECURITYDOMAIN", "111001101", "20231231", 0, 0); //사용자 권한 및 유효기간 설정
▶ public int SLDsEncFileDAC(...) : DAC 방식 암호화 함수
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : DAC 방식의 파일 암호화 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | |
[IN] int | option | 원본파일이 암호화 파일일 경우 재 암호화 옵션 | 0: 암호화하지않음 1: 복호화후 재암호화 |
Return Value
- 0 : 성공
- 이외의 값 : 실패
비고
- 없음
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
sFile.SLDsInitDAC();
sFile.SLDsAddUserDAC("hcjeong;bbbb", "011100110", 0, 0, 0);
sFile.SLDsAddGroupDAC("group1;group2","111100011", 0, 0, 0);
sFile.SLDsAddUserDAC("hong;ddd", "001100110", 0, 0, 0);
int ret = sFile.SLDsEncFileDAC("c:\\keyFile\\keyDAC.sc", "c:/a.doc", "c:/a(암호).doc", 1);
/* 리턴 값에 따른 예외처리 */
}
}
▶ public int SLDsEncFileDACV2(...) : DAC 방식 암호화 함수
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : DAC 방식의 파일 암호화 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[IN] String | systemName | 연동 시스템 이름 | 생성자 정보에 연동시스템 이름이 들어감. |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | |
[IN] int | option | 원본파일이 암호화 파일일 경우 재 암호화 옵션 | 0: 암호화하지않음 1: 복호화후 재암호화 |
Return Value
- 0 : 성공
- 이외의 값 : 실패
비고
- 없음
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
sFile.SLDsInitDAC();
sFile.SLDsAddUserDAC("hcjeong;bbbb", "011100110", 0, 0, 0);
sFile.SLDsAddGroupDAC("group1;group2","111100011", 0, 0, 0);
sFile.SLDsAddUserDAC("hong;ddd", "001100110", 0, 0, 0);
int ret = sFile.SLDsEncFileDACV2("c:\\keyFile\\keyDAC.sc", "EDMS", "c:/a.doc", "c:/a(암호).doc", 1);
/* 리턴 값에 따른 예외처리 */
}
}
▶ public int CreateDecryptFileDAC(...) : DAC 방식 복호화 함수
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : DAC 방식의 파일 복호화 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이 름(경로포함) | |
[IN] String | groupID | 권한을 구분 적용하는 그룹 ID | 사용자 ID도 가능 |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | 암호화 문서 |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | 복호화 문서 |
[IN] String | authInfo | 권한 정보(Base64 Encode) | SCGetFileType.dll 로 생성한 권한 정보 - 사용하지 않는 경우 생략 가능 |
Return Value
- 0 : 성공
- -36: 원본파일이 일반문서(비암호화 문서) -> 에러처리 불필요하며 성공과 동일하게 적용
- 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- 원본 파일이 비암호화 파일인 경우, 대상 경로로 파일을 복사한 후, -36 코드 값 리턴
암호화 파일이 MAC 파일인 경우, ※13 변경 사항 참조
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
int ret = sFile. CreateDecryptFileDAC (
"c:\\keyDAC.sc", //키 파일 경로
"user0001", // 아이디
"c:\\a(암호).doc", // 복호화 할 소스 경로
"c:\\a(복호).doc", // 복호화 할 대상 경로
"" // 권한 정보 ( 사용하지 않는 경우 생략 가능 )
);
/* 리턴 값에 따른 예외처리 */
}
}
▶ public int CreateEncryptFile(...) : MAC 방식 암호화 함수
- 제어방식 : MAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : MAC 방식의 파일 암호화 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[IN] String | categoryID | 권한 구분을 위한 범주 ID | |
[IN] String | categoryName | 권한 구분을 위한 범주 이름 | 범주 명이 정해지지 않았을 시 'Server'입력 |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | 원본 문서 |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | 암호화 문서 |
[IN] int | option | 원본파일이 암호화 파일일 경우 재 암호화 옵션 | 0: 암호화하지않음 1: 복호화후 재암호화 |
Return Value
- 0 : 성공
- 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- 없음
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
int ret = sFile.CreateEncryptFile(
"c\\key.sc", //키 파일 경로
"0000001", // 범주 아이디
"기밀문서", // 범주명을 넣어준다.
" c\\a.doc", // 암호화 할 소스 경로
" c\\a(암호).doc", // 암호화 할 목적 경로
1 // 원본 파일이 암호화 된 경우 옵션 값
);
/* 리턴 값에 따른 예외처리 */
}
}
▶ public int DSAPIEncFileV2(...) : MAC 방식 암호화 함수
- 제어방식 : MAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : MAC 방식의 파일 암호화 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[IN] String | categoryID | 권한 구분을 위한 범주 ID | |
[IN] String | categoryName | 권한 구분을 위한 범주 이름 | 범주 명이 정해지지 않았을 시 'Server'입력 |
[IN] String | systemName | 연동 시스템 이름 | 생성자 정보에 연동시스템 이름이 들어감. |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | 원본 문서 |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | 암호화 문서 |
[IN] int | option | 원본파일이 암호화 파일일 경우 재 암호화 옵션 | 0: 암호화하지않음 1: 복호화후 재암호화 |
Return Value
- 0 : 성공
- 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- 파라미터로 받은 시스템이름은 암호화된 파일의 문서보안 정보보기 탭에서 생성자 정보로 사용됨
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
int ret = sFile. DSAPIEncFileV2 (
"c\\key.sc", //키 파일 경로
"0000001", // 범주 아이디
"기밀문서", // 범주명을 넣어준다.
"EDMS", // 연동 시스템 이름
" c\\a.doc", // 암호화 할 소스 경로
" c\\a(암호).doc", // 암호화 할 목적 경로
1 // 원본 파일이 암호화 된 경우 옵션 값
);
/* 리턴 값에 따른 예외처리 */
}
}
▶ public int DSAPIEncFileV2AddExpireDate(...) : MAC 방식 암호화 함수
- 제어방식 : MAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : MAC 방식의 파일 암호화 함수
- 이 함수를 통해 생성된 문서는 정해진 ExpireDate 날짜까지만 사용가능
- 정해진 날짜 이후 오픈 시, 파괴 옵션에 따라 볼 수 없거나 파괴됨
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[IN] String | categoryID | 권한 구분을 위한 범주 ID | |
[IN] String | categoryName | 권한 구분을 위한 범주 이름 | 범주 명이 정해지지 않았을 시 'Server'입 력 |
[IN] String | systemName | 연동 시스템 이름 | 생성자 정보에 연동시스템 이름이 들어감. |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | 원본 문서 |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | 암호화 문서 |
[IN] String | expireDate | 유효기간 | "20250101” 같은 형식 |
[IN] String | autoDestroy | 파괴 옵션 | "0" : 열지 못하게, "4" : 파기 |
[IN] int | option | 원본파일이 암호화 파일일 경우 재 암호화 옵션 | 0: 암호화하지않음 1: 복호화후 재암호화 |
Return Value
- 0 : 성공
- 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- 없음
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
int ret = sFile.DSAPIEncFileV2AddExpireDate(
"c:/keyFile/key.sc",
"0000001",
"1등급",
"KM",
"c:/test/test.doc",
"c:/test/testAddDestroyEnc.doc",
"20071101", // 예) "20070820" 같은로직
"4", // "0" : 열지 못하게, "4" : 파기
1 // 원본 파일이 암 호화 된 경우 옵션 값
);
/* 리턴 값에 따른 예외처리 */
}
}
▶ public int CreateDecryptFile(...) : MAC 방식 복호화 함수
- 제어방식 : MAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : MAC 방식의 파일 복호화 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[IN] String | categoryID | 권한 구분을 위한 범주 ID | |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | 원본 문서 |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | 암호화 문서 |
[IN] String | authInfo | 권한 정보(Base64 Encode) | SCGetFileType.dll 로 생성한 권한 정보 - 사용하지 않는 경우 생략 가능 |
Return Value
- 0 : 성공
- -36: 원본파일이 일반문서(비암호화 문서) -> 에러처리 불필요하며 성공과 동일하게 적용
- 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- 원본 파일이 비암호화 파일인 경우, 대상 경로로 파일을 복사한 후, -36 코드 값 리턴
암호화 파일이 DAC 이 아닌 경우, ※13 변경 사항 참조
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
int ret = sFile.CreateDecryptFile(
"c:\\key.sc", //키 파일 경로
"0000001", // 범주 아이디
"c:\\a(암호).doc", // 복호화 할 소스 경로
"c:\\a(복호).doc", // 복호화 할 대상 경로
authInfo // 권한 정보 ( 사용하지 않는 경우 생략 가능 )
);
/* 리턴값에 따른 예외처리 */
}
}
▶ public int isEncryptFile(...) : 암호화 여부 판별 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLBsUtil
- 설명 : 해당 문서의 암호화 여부 판별 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | filePath | 체크파일 이름(경로포함) |
Return Value
- 1 : 암호화 파일
- 0 : 일반 파일
- -1 : Exception 발생 시
비고
- 없음
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLBsUtil sUtil = new SLBsUtil();
int encrypted = sUtil.isEncryptFile("./a.doc");
}
}
▶ public int DSEncMethod(...) : 암호화 파일의 암호화 방식을 알아내는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncDecHeader
- 설명 : 해당 파일의 암호화 방법 확인 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | filePath | 체크파일 이름(경로포함) |
Return Value
- 0: MAC 방식 암호화 파일
- 1: DAC 방식 암호화 파일
- 2: GRADE 방식 암호화 파일
- -1 : 비정상 암호화 파일
- -36 : 일반 파일
- 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- 없음
예제
DSSimpleEncFileDAC 함수에 있음.
** 선언 시 properties에 Key 파일 경로를 설정 하거나 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
- SLDsEncDecHeader()
=> properties 에 DSKEYENCRYPT_KEYFILE 설정 필요(Document Security 하드코딩된 암호화 키 노출 취약점 개선)
- SLDsEncDecHeader(String KeyFilePath)
- SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)
▶ public int DSIsSupportFile(...) : 지원되는 확장자 파일인지 확인하는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : 넘겨 받은 파라미터가 지원되는 확장자 파일인지 확인한다.
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | filePath | 체크파일 이름(경로포함) |
Return Value
- 1 : 지원되는 확장자
- 0 : 지원되지 않는 확장자
- 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- 없음
예제
DSSimpleEncFileDAC 함수에 있음.
▶ public int DSSimpleEncFile(...) : MAC 방식의 Simple 파일 암호화 함수
- 제 어방식 : MAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : MAC 방식의 파일 암호화를 한다.
- 지원하지 않는 확장자에 대해서도 ".dsd"를 붙여 암호화를 하고 0을 리턴한다
- a.log 암호화 => a.log.dsd
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[IN] String | categoryID | 권한 구분을 위한 범주 ID | |
[IN] String | categoryName | 정의된 범주 이름 | 범주 명이 정해지지 않았을 시 'Server'입력 |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | 원본 문서 |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | 암호화 문서 |
[IN] int | option | 원본파일이 암호화 파일일 경우 재 암호화 옵션 | 0: 암호화하지않음 1: 복호화후 재암호화 |
Return Value
- 0: 성공
- 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- 없음
예제
DSSimpleEncFileDAC 함수에 있음.
▶ public int DSSimpleEncFileDAC(...) : DAC 방식의 Simple 파일 암호화 함수
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : DAC 방식의 파일 암호화를 한다.
- 지원하지 않는 확장자에 대해서도 ".dsd"를 붙여 암호화를 하고 0을 리턴한다
- a.log 암호화 => a.log.dsd
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | 원본 문서 |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | 암호화 문서 |
[IN] int | option | 원본파일이 암호화 파일일 경우 재 암호화 옵션 | 0: 암호화하지않음 1: 복호화후 재암호화 |
Return Value
- 0: 성공
- 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- 지원되지 않는 확장자의 경우 읽기, 해제, 반출, 권한변경의 권한을 넣어준다.
- DSIsSupportFile API를 사용하여 지원되는 확장자인지를 확인하여 분기 한다.
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
// 키 파일 입력 할 경우
String keyDACPath = "S:\\TFS_Project2\\Linker\\ServiceLinker\\src\\JavaServiceLinker\\keyfiles\\test44\\KeyDAC_44.sc";
SLDsEncDecHeader DsEncDecHeader = new SLDsEncDecHeader(keyDACPath);
// 키 직접 입력 할 경우
SLDsEncDecHeader SLDSHeader = new SLDsEncDecHeader("DS Server Header Key", "Custom Header Key");
int ret = 0;
// 암호화 방식 체크
ret = DsEncDecHeader.DSEncMethod( "c:/test/b(MAC보안).txt" );
System.out.println( "ret : " + ret );
// 확장자 체크
ret = sFile.DSIsSupportFile( "c:/test/a.log" );
System.out.println( "지원되는 확장자 여부 a.log : " + ret );
ret = sFile.DSIsSupportFile( "c:/test/.txt" );
System.out.println( "지원되는 확장자 여부 a.txt : " + ret );
// 간단 암호화 테스트 MAC
int nSimple = sFile.DSSimpleEncFile(
"c:/keyFile/key.sc",
"0000010",
"Server",
"c:/test/a.log",
"c:/test/a(MAC암호).log",
1
);
System.out.println( "nSimple : " + nSimple );
// 간단 암호화 테스트 DAC
String srcPath = new String( "c:/test/a.log" );
sFile.SLDsInitDAC();
if( sFile.DSIsSupportFile( srcPath ) == 0 )
{
// 지원하지 않는 확장자일 경우 읽기, 해제, 반출, 권한 변경 권한을 준다.
sFile.SLDsAddUserDAC( "hcjeong", "010110001", 0, 0, 0 );
}
else
sFile.SLDsAddUserDAC( "hcjeong", "010000000", 0, 0, 0 );
}
int nSimpleDAC = sFile.DSSimpleEncFileDAC( "c:/keyFile/keyDAC.sc", "c:/test/a.log",
"c:/test/a(simDAC암호).log",
1
);
}
▶ public int DSSimpleEncFileV2(...) : MAC 방식의 Simple 파일 암호화 함수
- 제어방식 : MAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : MAC 방식의 파일 암호화를 한다.
- 지원하지 않는 확장자에 대해서도 ".dsd"를 붙여 암호화를 하고 0을 리턴한다
- a.log 암호화 => a.log.dsd
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[IN] String | categoryID | 권한 구분을 위한 범주 ID | |
[IN] String | categoryName | 정의된 범주 이름 | 범 주 명이 정해지지 않았을 시 'Server'입력 |
[IN] String | systemName | 연동 시스템 이름 | 생성자 정보에 연동시스템 이름이 들어감. |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | 원본 문서 |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | 암호화 문서 |
[IN] int | option | 원본파일이 암호화 파일일 경우 재 암호화 옵션 | 0: 암호화하지않음 1: 복호화후 재암호화 |
Return Value
- 0: 성공
- 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- 파라미터로 받은 시스템이름은 암호화된 파일의 문서보안 정보보기 탭에서 생성자 정보로 사용됨
예제
DSSimpleEncFileDACV2 함수에 있음.
▶ public int DSSimpleEncFileDACV2(...) : DAC 방식의 Simple 파일 암호화 함수
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : DAC 방식의 파일 암호화를 한다.
- 지원하지 않는 확장자에 대해서도 ".dsd"를 붙여 암호화를 하고 0을 리턴한다
- a.log 암호화 => a.log.dsd
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[IN] String | systemName | 연동 시스템 이름 | 생성자 정보에 연동시스템 이름이 들어감. |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | |
[IN] int | option | 원본파일이 암호화 파일일 경우 재 암호화 옵션 | 0: 암호화하지않음 1: 복호화후 재암호화 |
Return Value
- 0: 성공
- 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- 파라미터로 받은 시스템이름은 암호화된 파일의 문서보안 정보보기 탭에서 생성자 정보로 사용됨
- 지원되지 않는 확장자의 경우 읽기, 해제, 반출, 권한변경의 권한을 넣어준다.
- DSIsSupportFile API를 사용하여 지원되는 확장자인지를 확인하여 분기 한다.
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
// 키 파일 입력 할 경우
String keyDACPath = "S:\\TFS_Project2\\Linker\\ServiceLinker\\src\\JavaServiceLinker\\keyfiles\\test44\\KeyDAC_44.sc";
SLDsEncDecHeader DsEncDecHeader = new SLDsEncDecHeader(keyDACPath);
// 키 직접 입력 할 경우
SLDsEncDecHeader SLDSHeader = new SLDsEncDecHeader("DS Server Header Key", "Custom Header Key");
int ret = 0;
// 암호화 방식 체크
ret = DsEncDecHeader.DSEncMethod( "c:/test/b(MAC보안).txt" );
System.out.println( "ret : " + ret );
// 확장자 체크
ret = sFile.DSIsSupportFile( "c:/test/a.log" );
System.out.println( "지원되는 확장자 여부 a.log : " + ret );
ret = sFile.DSIsSupportFile( "c:/test/.txt" );
System.out.println( "지원되는 확장자 여부 a.txt : " + ret );
// 간단 암호화 테스트 MAC 버전2
int nSimple = sFile.DSSimpleEncFileV2("c:/keyFile/key.sc",
"0000010",
"1등급",
"EDMS",
"c:/test/a.log",
"c:/test/a(MAC암호).log",
1
);
System.out.println( "nSimple : " + nSimple );
// 간단 암호화 테스트 DAC
String srcPath = new String( "c:/test/a.log" );
sFile.SLDsInitDAC();
if( sFile.DSIsSupportFile( srcPath ) == 0 )
{
// 지원하지 않는 확장자일 경우 읽기, 해제, 반출, 권한 변경 권한을 준 다.
sFile.SLDsAddUserDAC( "hcjeong", "010110001", 0, 0, 0 );
}
else
{
sFile.SLDsAddUserDAC( "hcjeong", "010000000", 0, 0, 0 );
}
int nSimpleDAC = sFile.DSSimpleEncFileDACV2( "c:/keyFile/keyDAC.sc",
"EDMS",
"c:/test/a.log",
"c:/test/a(simDAC암호).log",
1
);
System.out.println( "암호화 결과 값(0이면 성공) : " + nSimpleDAC );
}
}
▶ public int GetFileInfoOfHeader(...) : 암호화된 파일 헤더의 파일 정보를 알아내는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncDecHeader
- 설명 : 암호화된 파일 헤더의 파일 정보를 알아내는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[OUT]byte[] | sfiInfo | 파일 정보를 담고 있는 byte 배열 | 파일정보을 담을 사이즈 만큼 byte 배열 공간을 할당해줘야 한다. 파일 헤더 정보의 사이즈는 396 이다. |
Return Value
- 0: 성공
- 이외의 값: Service Linker 사양서의 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, SLDsEncFile Class를 사용하여야 한다.
- 파일 헤더 구조( sfiInfo )은 배열의 앞byte 부터 순차적으로 다음과 같이 구성되어 있다.
-
데이터 크기 설명 비고 16 생성 시간 260 생성 경로 20 작성자 아이디 50 작성자 이름 50 작성자 그룹 - 선언 시 properties에 Key 파일 경로를 설정 하거나 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
- SLDsEncDecHeader()
=> properties 에 DSKEYENCRYPT_KEYFILE 설정 필요(Document Security 하드코딩된 암호화 키 노출 취약점 개선) - SLDsEncDecHeader(String KeyFilePath)
- SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)
- SLDsEncDecHeader()
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
// 키 파일 입력 할 경우
String keyDACPath = "S:\\TFS_Project2\\Linker\\ServiceLinker\\src\\JavaServiceLinker\\keyfiles\\test44\\KeyDAC_44.sc";
SLDsEncDecHeader DsEncDecHeader = new SLDsEncDecHeader(keyDACPath);
// 키 직접 입력 할 경우
SLDsEncDecHeader SLDSHeader = new SLDsEncDecHeader("DS Server Header Key", "Custom Header Key");
byte[] sfiInfo = new byte[396];
// 파일 정보( SFI ) 를 가져온다.
int ret = DsEncDecHeader.GetFileInfoOfHeader( "c:/test/a(dac).doc", sfiInfo );
System.out.println( "ret : " + ret);
String strCreateTime = new String(sfiInfo, 0, 16 );
String strCreatePath = new String(sfiInfo, 16, 260 );
String strWriterID = new String(sfiInfo, 16 + 260, 20 );
String strWriterName = new String(sfiInfo, 16 + 260 + 20, 50 );
String strWriterGroup = new String(sfiInfo, 16 + 260 + 20 + 50, 50 );
System.out.println( "strCreateTime : " + strCreateTime );
System.out.println( "strCreatePath : " + strCreatePath );
System.out.println( "strWriterID : " + strWriterID );
System.out.println( "strWriterName : " + strWriterName );
System.out.println( "strWriterGroup : " + strWriterGroup );
}
}
▶ public int GetFileInfoOfHeaderV2(...) : 암호화된 파일 헤더의 파일 정보를 알아내는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncDecHeader
- 설명 : 암호화된 파일 헤더의 파일 정보를 알아내는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[OUT]byte[] | sfiInfo | 파일 정보를 담고 있는 byte 배열 | 파일정보을 담을 사이즈 만큼 byte 배열 공간을 할당해줘야 한다. 파일 헤더 정보의 사이즈는 2791 이다. |
Return Value
- 0: 성공
- 이외의 값: Service Linker 사양서의 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
-
※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, SLDsEncFile Class를 사용하여야 한다.
-
파일 헤더 구조( sfiInfo )은 배열의 앞byte 부터 순차적으로 다음과 같이 구성되어 있다.
-
데이터 크기 설명 비고 16 생성 시간 260 생성 경로 20 작성자 아이디 50 작성자 이름 50 작성자 그룹 20 생 성 장소 CREATEPLACE 1024 그룹 하이러키 자신의 그룹아이디에서 최상위 부서까지의 그룹아이디 리스트 1 암호화 타입 20 서버 아이디 실제 서버 아이디의 크기는 28byte이며, 20byte를 넘는 서버 아이디의 경우 뒷부분이 잘리는 문제 발생 50 서버 이름 128 문서 종류 128 문서 등급 1024 기타 정보 SFI_EXTRA_INFO
서비스링커에서는 커스텀필드 -
선언 시 properties에 Key 파일 경로를 설정 하거나 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
- SLDsEncDecHeader()
=> properties 에 DSKEYENCRYPT_KEYFILE 설정 필요 (Document Security 하드코딩된 암호화 키 노출 취약점 개선) - SLDsEncDecHeader(String KeyFilePath)
- SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)
- SLDsEncDecHeader()
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
// 키 파일 입력 할 경우
String keyDACPath = "S:\\TFS_Project2\\Linker\\ServiceLinker\\src\\JavaServiceLinker\\keyfiles\\test44\\KeyDAC_44.sc";
SLDsEncDecHeader DsEncDecHeader = new SLDsEncDecHeader(keyDACPath);
// 키 직접 입력 할 경우
SLDsEncDecHeader SLDSHeader = new SLDsEncDecHeader("DS Server Header Key", "Custom Header Key");
byte[] arData = new byte[2791];
// 파일 정보( SFI ) 를 가져온다.
int ret = DsEncDecHeader.GetFileInfoOfHeader( "c:/test/a(dac).doc", arData );
System.out.println( "ret : " + ret );
String strCreateTime = new String( arData, 0, 16 );
String strCreatePath = new String( arData, 16, 260 );
String strWriterID = new String( arData, 16 + 260, 20 );
String strWriterName = new String( arData, 16 + 260 + 20, 50 );
String strWriterGroupName = new String( arData, 16 + 260 + 20 + 50, 50 );
String strCreatePlace = new String( arData, 16 + 260 + 20 + 50 + 50, 20 );
String strGroupHierarchy = new String( arData, 16 + 260 + 20 + 50 + 50 + 20, 1024 );
String strEncType = new String( arData, 16 + 260 + 20 + 50 + 50 + 20 + 1024, 1 );
String strServerID = new String( arData, 16 + 260 + 20 + 50 + 50 + 20 + 1024 + 1, 20 );
String strServerName = new String( arData, 16 + 260 + 20 + 50 + 50 + 20 + 1024 + 1 + 20, 50 );
String strDocuKind = new String( arData, 16 + 260 + 20 + 50 + 50 + 20 + 1024 + 1 + 20 + 50, 128 );
String strGradeInfo = new String( arData, 16 + 260 + 20 + 50 + 50 + 20 + 1024 + 1 + 20 + 50 + 128, 128 );
String strExtraInfo = new String( arData, 16 + 260 + 20 + 50 + 50 + 20 + 1024 + 1 + 20 + 50 + 128 + 128, 1024 );
System.out.println( "strCreateTime : " + strCreateTime );
System.out.println( "strCreatePath : " + strCreatePath );
System.out.println( "strWriterID : " + strWriterID );
System.out.println( "strWriterName : " + strWriterName );
System.out.println( "strWriterGroupName : " + strWriterGroupName );
System.out.println( "strCreatePlace : " + strCreatePlace );
System.out.println( "strGroupHierarchy : " + strGroupHierarchy );
System.out.println( "strEncType : " + strEncType );
System.out.println( "strServerID : " + strServerID );
System.out.println( "strServerName : " + strServerName );
System.out.println( "strDocuKind : " + strDocuKind );
System.out.println( "strGradeInfo : " + strGradeInfo );
System.out.println( "strExtraInfo : " + strExtraInfo );
}
}
▶ public int GetMacOfHeader(...) : 암호화된 파일 헤더의 MAC 정보를 알아내는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncDecHeader
- 설명 : 암호화된 파일 헤더의 MAC 정보를 알아내는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[OUT]byte[] | macInfo | MAC 정보를 담고 있는 byte 배열 | MAC 정보를 담을 사이즈 만큼 byte 배열 공간을 할당해줘야 한다. 파일 헤더 정보의 사이즈는 50 이다. |
Return Value
- 0: 성공
- 이외의 값: Service Linker 사양서의 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
-
※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, SLDsEncFile Class를 사용하여야 한다.
-
파일 헤더 구조( macInfo )은 배열의 앞byte 부터 순차적으로 다음과 같이 구성되어 있다.
-
데이터 크 기 설명 비고 50 범주 이름 -
DSEncMethod() 를 사용하여 MAC 형식의 암호화된 파일인지 확인 후 사용한다.
-
선언 시 properties에 Key 파일 경로를 설정 하거나 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
- SLDsEncDecHeader()
=> properties 에 DSKEYENCRYPT_KEYFILE 설정 필요 (Document Security 하드코딩된 암호화 키 노출 취약점 개선) - SLDsEncDecHeader(String KeyFilePath)
- SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)
- SLDsEncDecHeader()
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
// 키 파일 입력 할 경우
String keyDACPath = "S:\\TFS_Project2\\Linker\\ServiceLinker\\src\\JavaServiceLinker\\keyfiles\\test44\\KeyDAC_44.sc";
SLDsEncDecHeader DsEncDecHeader = new SLDsEncDecHeader(keyDACPath);
// 키 직접 입력 할 경우
SLDsEncDecHeader SLDSHeader = new SLDsEncDecHeader("DS Server Header Key", "Custom Header Key");
byte[] macInfo = new byte[50];
// 먼저 DSEncMethod()를 통해 MAC 으로 암호화 되어 있는지 체크한다.
int macEncrypted = DsEncDecHeader.DSEncMethod("c:/test/a(mac).doc" );
System.out.println( "macEncrypted :" + macEncrypted );
// 파일이 MAC 암호화가 아닐 경우 다른 예외처리를 해 준다.
if( macEncrypted != 0 )
{
System.out.println( "기타 다른 예외처리 처리..." );
return;
}
int ret = DsEncDecHeader.GetMacOfHeader( filePath, macInfo );
System.out.println( " ret: " + ret );
String categoryName = new String( macInfo, 0, 50 );
System.out.println( "CategoryName : " + categoryName );
}
}
▶ public int GetMacOfHeaderV2(...) : 암호화된 파일 헤더의 MAC 정보를 알아내는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncDecHeader
- 설명 : 암호화된 파일 헤더의 MAC 정보를 알아내는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFilePath | 키파일 이름(경로포함) | |
[OUT]byte[] | macInfo | MAC 정보를 담고 있는 byte 배열 | MAC 정보를 담을 사이즈 만큼 byte 배열 공간을 할당해줘야 한다. 파일 헤더 정보의 사이즈는 70 이다. |
Return Value
- 0: 성공
- 이외의 값: Service Linker 사양서의 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
-
※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, SLDsEncFile Class를 사용하여야 한다.
-
파일 헤더 구조( macInfo )은 배열의 앞byte 부터 순차적으로 다음과 같이 구성되어 있다.
-
데이터 크기 설명 비고 20 범주 아이디 50 범주 이름 -
DSEncMethod() 를 사용하여 MAC 형식의 암호화된 파일인지 확인 후 사용한다.
-
선언 시 properties에 Key 파일 경로를 설정 하거나 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
- SLDsEncDecHeader()
=> properties 에 DSKEYENCRYPT_KEYFILE 설정 필요 (Document Security 하드코딩된 암호화 키 노출 취약점 개선) - SLDsEncDecHeader(String KeyFilePath)
- SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)
- SLDsEncDecHeader()
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
// 키 파일 입력 할 경우
String keyDACPath = "S:\\TFS_Project2\\Linker\\ServiceLinker\\src\\JavaServiceLinker\\keyfiles\\test44\\KeyDAC_44.sc";
SLDsEncDecHeader DsEncDecHeader = new SLDsEncDecHeader(keyDACPath);
// 키 직접 입력 할 경우
SLDsEncDecHeader SLDSHeader = new SLDsEncDecHeader("DS Server Header Key", "Custom Header Key");
byte[] macInfo = new byte[70];
// 먼저 DSEncMethod()를 통해 MAC 으로 암호화 되어 있는지 체크한다.
int macEncrypted = DsEncDecHeader.DSEncMethod("c:/test/a(mac).doc" );
System.out.println( "macEncrypted :" + macEncrypted );
// 파일이 MAC 암호화가 아닐 경우 다른 예외처리를 해 준다.
if( macEncrypted != 0 )
{
System.out.println( "기타 다른 예외처리 처리..." );
return;
}
int ret = DsEncDecHeader.GetMacOfHeader( filePath, macInfo );
System.out.println( " ret: " + ret );
String categoryID = new String( macInfo, 0, 20 );
String categoryName = new String( macInfo, 20, 50 );
System.out.println( "CategoryID : " + categoryID );
System.out.println( "CategoryName : " + categoryName );
}
}
▶ public int GetDacCountOfHeader(...) : 암호화된 파일 헤더의 DAC 개수를 알려 주는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncDecHeader
- 설명 : 암호화된 파일 헤더의 DAC 개수를 알려 주는 함수
Parameter
타입 | 변수명 | 설 명 | 비고 |
---|---|---|---|
[IN] String | filePath | 키파일 이름(경로포함) |
Return Value
- DAC 개수를 리턴
- 0보다 작은 값 : Service Linker 사양서의 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, SLDsEncFile Class를 사용하여야 한다.
- GetDacOfHeader 함수에서 사용되는 함수임
- DSEncMethod() 를 사용하여 MAC 형식의 암호화된 파일인지 확인 후 사용한다.
- 선언 시 properties에 Key 파일 경로를 설정 하거나 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
- SLDsEncDecHeader()
=> properties 에 DSKEYENCRYPT_KEYFILE 설정 필요 (Document Security 하드코딩된 암호화 키 노출 취약점 개선) - SLDsEncDecHeader(String KeyFilePath)
- SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)
- SLDsEncDecHeader()
예제
GetDacOfHeader 참조
▶ public int GetDacOfHeaderV2(...) : 암호화된 파일 헤더의 DAC 정보를 알아내는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncDecHeader
- 설명 : 암호화된 파일 헤더의 DAC 정보를 알아내는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | filePath | 키파일 이름(경로포함) | |
[OUT]byte[] | dacInfo | DAC정보를 담고 있는 byte 배열 | DAC정보을 담을 사이즈 만큼 byte 배열 공간을 할당해야 한다. 하나의 DAC 정보 사이즈는 4200 이다. 예) DAC 정보가 3개이면 4200 * 3 사이즈만큼 공간을 할당해야 한다. |
|
Return Value
- 0: 성공
- 이외의 값 : Service Linker 사양서의 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
-
※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, SLDsEncFile Class를 사용하여야 한다.
-
DSEncMethod() 를 사용하여 DAC 형식의 암호화된 파일인지 확인 후 사용한다.
-
DAC의 개수만큼 다음과 같이 구성이 되어 있다.
-
DAC의 개수는 GetDacCountOfHeader() 를 통하여 알 수 있다.
-
데이터 크기 설명 비고 1 타입 20 아이디 50 이름 1 읽기 권한 1byte 문자 4 읽기 가능 횟수 1 편집 권한 1byte 문자 1 해제 권한 1byte 문자 1 반출 권한 1byte 문자 1 프린트 권한 1byte 문자 4 프린트 횟수 1 프린트 마킹 1byte 문자 16 유효 기간 1 자동 파기 1byte 문자 1 권한 변경 1byte 문자 1024 등급문서 접근가능 분류아이디 리스트 1024 등급문서 접근가능 그룹아이디 리스트 1024 등급문서 접근가능 사용자 아이디 리스트 1024 등급문서 접근배제 사용자 아이디 리스트 1 하위그룹 접근불가 1byte 문자
'1'이면 해당 그룹만 접근가능
하위 그룹은 접근 불가임 -
선언 시 properties에 Key 파일 경로를 설정 하거나 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
- SLDsEncDecHeader()
=> properties 에 DSKEYENCRYPT_KEYFILE 설정 필요 (Document Security 하드코딩된 암호화 키 노출 취약점 개선) - SLDsEncDecHeader(String KeyFilePath)
- SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)
- SLDsEncDecHeader()
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
// 키 파일 입력 할 경우
String keyDACPath = "S:\\TFS_Project2\\Linker\\ServiceLinker\\src\\JavaServiceLinker\\keyfiles\\test44\\KeyDAC_44.sc";
SLDsEncDecHeader DsEncDecHeader = new SLDsEncDecHeader(keyDACPath);
// 키 직접 입력 할 경우
SLDsEncDecHeader SLDSHeader = new SLDsEncDecHeader("DS Server Header Key", "Custom Header Key");
int dacEncrypted = DsEncDecHeader.DSEncMethod("c:/test/a(DAC Enc).txt" );
System.out.println( " dacEncrypted :" + dacEncrypted );
// 파일이 DAC 암호화가 아닐 경우 다른 예외처리를 해 준다.
if(dacEncrypted != 1 )
{
System.out.println( "기타 다른 예외처리 처리..." );
return;
}
int dacCount = DsEncDecHeader.GetDacCountOfHeader("c:/test/a(DAC Enc).txt" );
System.out.println( " dacCount : " + dacCount );
// 크기는 dacCount * 4200으로 해주어야 한다.
byte[] dacInfo = new byte[4200 * nCountOfDac];
dacEncrypted = DsEncDecHeader.GetDacOfHeader("c:/test/a(DAC Enc).txt", dacInfo );
System.out.println( " dacEncrypted : " + dacEncrypted );
for( int k = 0; k < dacCount; k++ )
{
String printInfo = new String( dacInfo, k * 4200, 4200 );
System.out.println( printInfo );
}
}
}
▶ public int GetRuiCountOfHeader(...) : 암호화된 파일 헤더의 RUI 개수를 알려 주는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncDecHeader
- 설명 : 암호화된 파일 헤더의 RUI 개수를 알려 주는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | filePath | 키파일 이름(경로포함) |
Return Value
- RUI 개수를 리턴
- 0보다 작은 값 : Service Linker 사양서의 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, SLDsEncFile Class를 사용하여야 한다.
- GetRuiOfHeader 함수에서 사용되는 함수임
- DSEncMethod() 를 사용하여 MAC 형식의 암호화된 파일인지 확인 후 사용한다.
- 선언 시 properties에 Key 파일 경로를 설정 하거나 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
- SLDsEncDecHeader()
=> properties 에 DSKEYENCRYPT_KEYFILE 설정 필요 (Document Security 하드코딩된 암호화 키 노출 취약점 개선) - SLDsEncDecHeader(String KeyFilePath)
- SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)
- SLDsEncDecHeader()
예제
GetRuiOfHeader 참조
▶ public int GetRuiOfHeader(...) : 암호화된 파일 헤더의 RUI 정보를 알아내는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncDecHeader
- 설명 : 암호화된 파일 헤더의 RUI 정보를 알아내는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | filePath | 키파일 이름(경로포함) | |
[OUT]byte[] | ruiInfo | RUI정보를 담고 있는 byte 배열 | RUI정보을 담을 사이즈 만큼 byte 배열 공간을 할당해야 한다. 하나의 RUI 정보 사이즈는 145 이다. 예) RUI 정보가 3개이면 145 * 3 사이즈만큼 공간을 할당해야 한다. |
|
Return Value
- 0: 성공
- 이외의 값 : Service Linker 사양서의 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB
비고
- ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, SLDsEncFile Class를 사용하여야 한다.
- DSEncMethod() 를 사용하여 DAC 형식의 암호화된 파일인지 확인 후 사용한다.
- RUI의 개수만큼 다음과 같이 구성이 되어 있다.
- RUI의 개수는 GetRuiCountOfHeader() 를 통하여 알 수 있다.
-
데이터 크기 설명 비고 20 아이디 50 이름 50 그룹 이름 1 열람 여부 1byte 문자 4 읽은 횟수 4 프 린트 횟수 16 최근 열람 시간 - 선언 시 properties에 Key 파일 경로를 설정 하거나 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
- SLDsEncDecHeader()
=> properties 에 DSKEYENCRYPT_KEYFILE 설정 필요 (Document Security 하드코딩된 암호화 키 노출 취약점 개선) - SLDsEncDecHeader(String KeyFilePath)
- SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)
- SLDsEncDecHeader()
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
// 키 파일 입력 할 경우
String keyDACPath = "S:\\TFS_Project2\\Linker\\ServiceLinker\\src\\JavaServiceLinker\\keyfiles\\test44\\KeyDAC_44.sc";
SLDsEncDecHeader DsEncDecHeader = new SLDsEncDecHeader(keyDACPath);
// 키 직접 입력 할 경우
SLDsEncDecHeader SLDSHeader = new SLDsEncDecHeader("DS Server Header Key", "Custom Header Key");
int ruiCount = DsEncDecHeader.GetRuiCountOfHeader("c:/test/a(DAC Enc).txt" );
System.out.println( " ruiCount : " + ruiCount );
if(ruiCount <= 0 )
{
System.out.println( "예외 처리" );
}
// 크기는 카운트 * 145로 해준다.
byte[] ruiInfo = new byte[145 * ruiCount];
int ret = DsEncDecHeader.GetRuiOfHeader("c:/test/a(DAC Enc).txt", ruiInfo);
System.out.println( " ret : " + ret );
// RUI의 갯수 만큼 루프를 돈다.
for( int n4 = 0; n4 < ruiCount; n4++ )
{
String printInfo = new String(ruiInfo, n4 * 145, 145 );
System.out.println( printInfo );
}
}
}
▶ public void SLDsEnvSet(...) : 확장자 체크 여부를 설정하는 함수.
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : 확장자 체크 여부를 설정한다.
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] int | checkExt | 체크할 값 | 0 이면 체크 안함, 그 이외의 값은 체크함 |
Return Value
- 없음
비고
- 암호화 API를 사용하기 전에 이 함수를 호출하여 확장차 체크 여부를 결정한다.
- 호출하지 않을시, 암호화 API에서 기본적으로 확장자를 체크한다.
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
sFile.SLDsEnvSet( 0 ); // 0이면 확장자를 체크하지 않음.
int ret = sFile.DSAPIEncFileV2( "c:/keyFile/key.sc",
"0000010",
"기밀문서",
"KM3",
"c:/test/테스트.log",
"c:/test/테스트(암호).log",
1
);
System.out.println( " ret : " + ret );
// 암호화 API의 파라미터가 유효할 경우, 확장자를 체크하면 -71 이, 체크하지 않으면 0 리턴 됨.
}
}
▶ public int DSGetDocuGradeDocument(...) : 등급문서 아이디를 알려주는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncDecHeader
- 설명 : 등급문서 아이디를 알려주는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | filePath | 파일 경로(파일명포함) | |
[OUT]byte[] | gradeID | 등급아이디 받을 배열 | 20byte를 미리 배정해 놓는다. |
Return Value
- 0 : 등급문서 아님
- 1 : 등급문서
- -36 : 암호화 파일이 아님
- -1 : 에러
비고
- ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, SLDsEncFile Class를 사용하여야 한다.
- 선언 시 properties에 Key 파일 경로를 설정 하거나 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
- SLDsEncDecHeader()
=> properties 에 DSKEYENCRYPT_KEYFILE 설정 필요(Document Security 하드코딩된 암호화 키 노출 취약점 개선) - SLDsEncDecHeader(String KeyFilePath)
- SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
// 키 파일 입력 할 경우
String keyDACPath = "S:\\TFS_Project2\\Linker\\ServiceLinker\\src\\JavaServiceLinker\\keyfiles\\test44\\KeyDAC_44.sc";
SLDsEncDecHeader DsEncDecHeader = new SLDsEncDecHeader(keyDACPath);
// 키 직접 입력 할 경우
SLDsEncDecHeader SLDSHeader = new SLDsEncDecHeader("DS Server Header Key", "Custom Header Key");
byte[] gradeID = new byte[22];
int ret = DsEncDecHeader. DSGetDocuGradeDocument ( "c:/test/a(등급 암호).doc", gradeID );
String strGradeID = new String(gradeID, 2, 20 );
System.out.println( "ret : " + ret );
System.out.println( "strGradeID : " + strGradeID );
}
}
▶ public int DSSLDocuGradeEnc(...) : 등급문서 암호화 API
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : 등급문서 암호화 API
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | docuKeyFilePath | 키파일 이름(경로포함) | 등급암호화 키 파일의 경로 및 파일명을 넣어야 함. |
[IN] String | systemName | 해당 시스템 명 | |
[IN] String | docuKind | 문서종류 | 사용하지 않을 시에는 "none”을 넣음. |
[IN] String | docuGradeID | 등급문서 ID | 필수 |
[IN] String | loginID | 로그인한 아이디 | |
[IN] String | groupPath | 해당 아이디의 그룹경로 | 그룹 하이러키를 말하며, 서비스링커외 다른 모듈의 API를 통하여 얻을 수 있음 |
[IN] String | extraInfo | 커스텀 필드 | 사용하지 않을 시에는 "none” 으로 입력 |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | |
[IN] int | simple | 단순 암호화 사용 여부 | 0 : 단순암호화 기능 사용하지 않음 1 : 단순암호화 기능 사용 |
[IN] int | option | 원본파일이 암호화 파일일 경우 재 암호화 옵션 | 0: 암호화하지않음 1: 복호화후 재암호화 |
|
Return Value
- 0: 성공
- 이외의 값: 에러값 참조
비고
- SettingPathForProperty()와 함께 사용됨 프로퍼티 파일과 같이 사용
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
sFile.SettingPathForProperty( "D:\\propertisData\\softcamp.properties" );
int ret = sFile.DSSLDocuGradeEnc( "c:/keyFile/GradeInfo.sc",
"GW System",
"none",
"0000002",
"hcjeong",
"SCDS_0000000009;SCDS_0000000001;SECURITYDOMAIN;",
"aaa",
"c:/test/a.doc",
"c:/test/a(복사 되는 등급 암호).doc",
0,
1
);
System.out.println( "Return value : " + ret );
}
}
▶ public int DSSLDocuGradeEncAddCreator(...) : 등급문서 암호화 API
- 제어방식 : DAC
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : 등급문서 암호화 API
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | docuKeyFilePath | 키파일 이름(경로포함) | 등급암호화 키 파일의 경로 및 파일명을 넣어야 함. |
[IN] String | systemName | 해당 시스템 명 | |
[IN] String | docuKind | 문서종류 | 사용하지 않을 시에는 "none”을 넣음. |
[IN] String | docuGradeID | 등급문서 ID | 필수 |
[IN] String | loginID | 로그인한 아이디 | |
[IN] String | groupPath | 해당 아이디의 그룹경로 | 그룹 하이러키를 말하며, 서비스링커외 다른 모듈의 API를 통하여 얻을 수 있음 |
[IN] String | extraInfo | 커스텀 필드 | 사용하지 않을 시에는 "none” 으로 입력 |
[IN] String | srcFilePath | 원본파일 이름(경로포함) | |
[IN] String | dstFilePath | 암호화한 파일 이름(경로포함) | |
[IN] String | creatorID | 생성자 ID | |
[IN] String | creatorGroupPath | 생성자 그룹경로 | 그룹 하이러키를 말하며, 서비스링커외 다른 모듈의 API를 통하여 얻을 수 있음. |
[IN] String | keyFileDACName | 키파일 이름(경로포함) | 생성자 키를 가진 DAC 키 파일 이름 |
[IN] int | simple | 단순 암호화 사용 여부 | 0 : 단순암호화 기능 사용하지 않음 1 : 단순암호화 기능 사용 |
[IN] int | option | 원본파일이 암호화 파일일 경우 재 암호화 옵션 | 0: 암호화하지않음 1: 복호화후 재암호화 |
|
Return Value
- 0: 성공
- 이외의 값: 에러값 참조
비고
- SettingPathForProperty()와 함께 사용됨 프로퍼티 파일과 같이 사용
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile slFile = new SLDsFile();
slFile.SettingPathForProperty( "D:\\propertisData\\softcamp.properties" );
/* 초기화 함수 */
slFile.SLDsInitGrade();
slFile.SLDsAddUserGrade("SECURITYDOMAIN", "111001101", 0, 0, 0); //사용자 권한 및 유효기간 설정
int ret = slFile. DSSLDocuGradeEncAddCreator ( "c:/keyFile/GradeInfo.sc",
"GW System",
"none",
"0000002",
"hcjeong",
"SCDS_0000000009;SCDS_0000000001;SECURITYDOMAIN;",
"aaa",
"c:/test/a.doc",
"c:/test/a(복사 되는 등급 암호).doc",
"oriskunk",
"SCDS_0000000009;SCDS_0000000001;SECURITYDOMAIN;",
"c:/keyFile/keyDAC.sc",
0,
1
);
System.out.println( "Return value : " + ret );
}
}
▶ public String getInfo(...) : 암호화 파일 헤더 정보를 얻는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncFile
- 설명 : 암호화 파일 헤더 정보를 얻는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | type | 헤더 타입 식별자 | 예제 코드 참고 |
Return Value
- 빈 문자열 : 데이터가 없는 경우
- 헤더 정보 문자열 : 데이터가 있는 경우
비고
- ※ 객체 사용 후, 반드시 clear() 함수를 호출해야 한다. ( 미 호출 시, Resource 문제 발생 )
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsEncFile sEncFile = new SLDsEncFile("암호화파일", "키파일"); // 암호화 헤더 키를 사용하지 않는 경우 키 파일은 생략 가능
String createTime = sEncFile.getInfo("CREATE_TIME");
String createPath = sEncFile.getInfo("CREATE_PATH");
String writerID = sEncFile.getInfo("WRITER_ID");
String writerName = sEncFile.getInfo("WRITER_NAME");
String writerGroupName = sEncFile.getInfo("WRITER_GROUP_NAME");
String createPlace = sEncFile.getInfo("CREATE_PLACE");
String writerGroupHierarchy = sEncFile.getInfo("WRITER_GROUP_HIERARCHY");
String encType = sEncFile.getInfo("ENC_TYPE");
String serverID = sEncFile.getInfo("SERVER_ID");
String serverName = sEncFile.getInfo("SERVER_NAME");
String documentType = sEncFile.getInfo("DOCUMENT_TYPE");
String documentGrade = sEncFile.getInfo("DOCUMENT_GRADE");
String extraInfo = sEncFile.getInfo("EXTRA_INFO");
sEncFile.clear();
}
}
▶ public String getInfoMAC(...) : 암호화 파일 헤더의 MAC 정보를 얻는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncFile
- 설명 : 암호화 파일 헤더의 MAC 정보를 얻는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] int | index | MAC 인덱스 | 0 ~ getInfoMACCount() - 1 |
[IN] String | type | 헤더 타입 식별자 | 예제 코드 참고 |
Return Value
- 빈 문 자열 : 데이터가 없는 경우
- 헤더 정보 문자열 : 데이터가 있는 경우
비고
- ※ 객체 사용 후, 반드시 clear() 함수를 호출해야 한다. ( 미 호출 시, Resource 문제 발생 )
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsEncFile sEncFile = new SLDsEncFile("암호화파일", "키파일"); // 암호화 헤더 키를 사용하지 않는 경우 키 파일은 생략 가능
String category = sEncFile.getInfo("MAC_CATEGORY");
String categoryName = sEncFile.getInfo("MAC_CATEGORY_NAME");
sEncFile.clear();
}
}
▶ public String getInfoDAC(...) : 암호화 파일 헤더의 DAC 정보를 얻는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncFile
- 설명 : 암호화 파일 헤더의 DAC 정보를 얻는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] int | index | DAC 인덱스 | 0 ~ getInfoDACCount() - 1 |
[IN] String | type | 헤더 타입 식별자 | 예제 코드 참고 |
Return Value
- 빈 문자열 : 데이터가 없는 경우
- 헤더 정보 문자열 : 데이터가 있는 경우
비고
- ※ 객체 사용 후, 반드시 clear() 함수를 호출해야 한다. ( 미 호출 시, Resource 문제 발생 )
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsEncFile sEncFile = new SLDsEncFile("암호화파일", "키파일"); // 암호화 헤더 키를 사용하지 않는 경우 키 파일은 생략 가능
String type = sEncFile.getInfoDAC(0, "DAC_TYPE");
String typeID = sEncFile.getInfoDAC(0, "DAC_TYPE_ID");
String typeName = sEncFile.getInfoDAC(0, "DAC_TYPE_NAME");
String read = sEncFile.getInfoDAC(0, "DAC_READ");
String readNumLimit = sEncFile.getInfoDAC(0, "DAC_READ_NUM_LIMIT");
String edit = sEncFile.getInfoDAC(0, "DAC_EDIT");
String decrypt = sEncFile.getInfoDAC(0, "DAC_DECRYPT");
String som = sEncFile.getInfoDAC(0, "DAC_SOM");
String print = sEncFile.getInfoDAC(0, "DAC_PRINT");
String printNumLimit = sEncFile.getInfoDAC(0, "DAC_PRINT_NUM_LIMIT");
String printMarking = sEncFile.getInfoDAC(0, "DAC_PRINT_MARKING");
String expireDate = sEncFile.getInfoDAC(0, "DAC_EXPIRE_DATE");
String autoDestroy = sEncFile.getInfoDAC(0, "DAC_AUTO_DESTROY");
String change = sEncFile.getInfoDAC(0, "DAC_CHANGE_AUTH");
String classID = sEncFile.getInfoDAC(0, "DAC_GRADE_ACCESS_CLASS_ID");
String groupID = sEncFile.getInfoDAC(0, "DAC_GRADE_ACCESS_GROUP_ID");
String userIDInclude = sEncFile.getInfoDAC(0, "DAC_GRADE_ACCESS_USER_ID_INCLUDE");
String userIDExclude = sEncFile.getInfoDAC(0, "DAC_GRADE_ACCESS_USER_ID_EXCLUDE");
String subGroupExclude = sEncFile.getInfoDAC(0, "DAC_SUBGROUP_EXCLUDE");
//String type = sEncFile.getInfoDAC(1, "DAC_TYPE");
sEncFile.clear();
}
}
▶ public String getInfoGRADE(...) : 암호화 파일 헤더의 DAC 정보(등급)를 얻는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncFile
- 설명 : 암호화 파일의 Grade (Dac type=2)정보를 얻는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | type | 헤더 타입 식별자 | 예제 코드 참고 |
Return Value
- 빈 문자열 : 데이터가 없는 경우
- 헤더 정보 문자열 : 데이터가 있는 경우
비고
- ※ 객체 사용 후, 반드시 clear() 함수를 호출해야 한다. ( 미 호출 시, Resource 문제 발생 )
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsEncFile sEncFile = new SLDsEncFile("암호화파일", "키파일"); // 암호화 헤더 키를 사용하지 않는 경우 키 파일은 생략 가능
String type = sEncFile.getInfoGrade("DAC_TYPE");
String typeID = sEncFile.getInfoGrade("DAC_TYPE_ID");
String typeName = sEncFile.getInfoGrade("DAC_TYPE_NAME");
String read = sEncFile.getInfoGrade("DAC_READ");
String readNumLimit = sEncFile.getInfoGrade("DAC_READ_NUM_LIMIT");
String edit = sEncFile.getInfoGrade("DAC_EDIT");
String decrypt = sEncFile.getInfoGrade("DAC_DECRYPT");
String som = sEncFile.getInfoGrade("DAC_SOM");
String print = sEncFile.getInfoGrade("DAC_PRINT");
String printNumLimit = sEncFile.getInfoGrade("DAC_PRINT_NUM_LIMIT");
String printMarking = sEncFile.getInfoGrade("DAC_PRINT_MARKING");
String expireDate = sEncFile.getInfoGrade("DAC_EXPIRE_DATE");
String autoDestroy = sEncFile.getInfoGrade("DAC_AUTO_DESTROY");
String change = sEncFile.getInfoGrade("DAC_CHANGE_AUTH");
String classID = sEncFile.getInfoGrade("DAC_GRADE_ACCESS_CLASS_ID");
String groupID = sEncFile.getInfoGrade("DAC_GRADE_ACCESS_GROUP_ID");
String userIDInclude = sEncFile.getInfoGrade("DAC_GRADE_ACCESS_USER_ID_INCLUDE");
String userIDExclude = sEncFile.getInfoGrade("DAC_GRADE_ACCESS_USER_ID_EXCLUDE");
String subGroupExclude = sEncFile.getInfoGrade("DAC_SUBGROUP_EXCLUDE");
//String type = sEncFile.getInfoGrade("DAC_TYPE");
sEncFile.clear();
}
}
▶ public String getInfoRUI(...) : 암호화 파일 헤더의 RUI 정보를 얻는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncFile
- 설명 : 암호화 파일 헤더의 RUI 정보를 얻는 함수
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] int | index | RUI 인덱스 | 0 ~ getInfoRUICount() - 1 |
[IN] String | type | 헤더 타입 식별자 | 예제 코드 참고 |
Return Value
- 빈 문자열 : 데이터가 없는 경우
- 헤더 정보 문자열 : 데이터가 있는 경우
비고
- ※ 객체 사용 후, 반드시 clear() 함수를 호출해야 한다. ( 미 호출 시, Resource 문제 발생 )
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsEncFile sEncFile = new SLDsEncFile("암호화파일", "키파일"); // 암호화 헤더 키를 사용하지 않는 경우 키 파일은 생략 가능
String category = sEncFile.getInfo("MAC_CATEGORY");
String userID = sEncFile.getInfo("RUI_USER_ID");
String userName = sEncFile.getInfo("RUI_USER_NAME");
String groupName = sEncFile.getInfo("RUI_GROUP_NAME");
String expireFlag = sEncFile.getInfo("RUI_EXPIRE_FLAG");
String readNum = sEncFile.getInfo("RUI_READ_NUM");
String printNum = sEncFile.getInfo("RUI_PRINT_NUM");
String recentReadTime = sEncFile.getInfo("RUI_RECENT_READ_TIME");
sEncFile.clear();
}
}
▶ public int getInfoMACCount(...) : 암호화 파일 헤더의 MAC 갯수를 얻는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncFile
- 설명 : 암호화 파일 헤더의 MAC 갯수를 얻는 함수
Parameter
- 없음
Return Value
- MAC 개수
비고
- ※ 객체 사용 후, 반드시 clear() 함수를 호출해야 한다. ( 미 호출 시, Resource 문제 발생 )
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsEncFile sEncFile = new SLDsEncFile("암호화파일", "키파일"); // 암호화 헤더 키를 사용하지 않는 경우 키 파일은 생략 가능
int macCount = sEncFile.getInfoMAC();
sEncFile.clear();
}
}
▶ public int getInfoDACCount(...) : 암호화 파일 헤더의 DAC 갯수를 얻는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncFile
- 설명 : 암호화 파일 헤더의 MAC 갯수를 얻는 함수
Parameter
- 없음
Return Value
- DAC 개수
비고
- ※ 객체 사용 후, 반드시 clear() 함수를 호출해야 한다. ( 미 호출 시, Resource 문제 발생 )
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsEncFile sEncFile = new SLDsEncFile("암호화파일", "키파일"); // 암호화 헤더 키를 사용하지 않는 경우 키 파일은 생략 가능
int dacCount = sEncFile.getInfoDAC();
sEncFile.clear();
}
}
▶ public int getInfoRUICount(...) : 암호화 파일 헤더의 RUI 갯수를 얻는 함수
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncFile
- 설명 : 암호화 파일 헤더의 RUI 갯수를 얻는 함수
Parameter
- 없음
Return Value
- RUI 개수
비고
- ※ 객체 사용 후, 반드시 clear() 함수를 호출해야 한다. ( 미 호출 시, Resource 문제 발생 )
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsEncFile sEncFile = new SLDsEncFile("암호화파일", "키파일"); // 암호화 헤더 키를 사용하지 않는 경우 키 파일은 생략 가능
int ruiCount = sEncFile.getInfoRUI();
sEncFile.clear();
}
}
▶ public String dsGetFullHeaderEx(...) : 암호화 문서의 헤더 정보를 Json 데이터로 리턴한다.
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsEncDecHeader
- 설명 : 암호화 문서의 헤더 정보를 Json 데이터로 리턴한다.
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | srcFileName | 소스파일(암호화파일) 경로 |
Return Value
- Json Value 로 리턴 함
- 실패 시
{
"errcode": -1
}- 0이외의값이 실패
- -1 : error, -36 : 일반 문서
- 성공 시
- 보안 문서 헤더 정보를 Json 형태로 리턴
- 보안문서 헤더 구조 : PreHeader, SFI, DAC 또는 MAC, RUI
- DAC, RUI는 JsonArray
- RUI 데이터는 없을 수도 있음
- DAC 값과 MAC 값 같이 있을 수 없음
- [DAC]
{
"errcode": 0,
"Custom_Type": 0,
"Document_ID": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]",
"Server_ID_Hash": "[-67, 41, -119, -28, -95, 1, ....]",
"DAC": [
{
"DAC_PRINT_MARKING": "1",
"DAC_PRINT_NUM_LIMIT": "",
"DAC_GRADE_ACCESS_CLASS_ID": "",
"DAC_TYPE_NAME": "송지훈",
"DAC_TYPE": "0",
"DAC_READ_NUM_LIMIT": "",
"DAC_DECRYPT": "0",
"DAC_SUBGROUP_EXCLUDE": "",
"DAC_PRINT": "1",
"DAC_GRADE_ACCESS_USER_ID_EXCLUDE": "",
"DAC_AUTO_DESTROY": "0",
"DAC_READ": "1",
"DAC_EXPIRE_DATE": "0",
"DAC_TYPE_ID": "jihoon.song",
"DAC_EDIT": "1",
"DAC_SOM": "0",
"DAC_GRADE_ACCESS_GROUP_ID": "",
"DAC_GRADE_ACCESS_USER_ID_INCLUDE": "",
"DAC_CHANGE_AUTH": "0"
},
{
"DAC_PRINT_MARKING": "1",
"DAC_PRINT_NUM_LIMIT": "",
"DAC_GRADE_ACCESS_CLASS_ID": "",
"DAC_TYPE_NAME": "소프트캠프",
"DAC_TYPE": "1",
"DAC_READ_NUM_LIMIT": "",
"DAC_DECRYPT": "0",
"DAC_SUBGROUP_EXCLUDE": "",
"DAC_PRINT": "1",
"DAC_GRADE_ACCESS_USER_ID_EXCLUDE": "",
"DAC_AUTO_DESTROY": "0",
"DAC_READ": "1",
"DAC_EXPIRE_DATE": "0",
"DAC_TYPE_ID": "SCDP00000",
"DAC_EDIT": "1",
"DAC_SOM": "0",
"DAC_GRADE_ACCESS_GROUP_ID": "",
"DAC_GRADE_ACCESS_USER_ID_INCLUDE": "",
"DAC_CHANGE_AUTH": "1"
}
],
"RUI": [
{
"RUI_PRINT_NUM": "",
"RUI_RECENT_READ_TIME": "2022-07-27 04:39",
"RUI_USER_NAME": "한상혁",
"RUI_READ_NUM": "",
"RUI_USER_ID": "shhan",
"RUI_GROUP_NAME": "SaaS개발3부",
"RUI_EXPIRE_FLAG": "0"
},
{
"RUI_PRINT_NUM": "",
"RUI_RECENT_READ_TIME": "2022-05-10 08:46",
"RUI_USER_NAME": "송지훈",
"RUI_READ_NUM": "",
"RUI_USER_ID": "jihoon.song",
"RUI_GROUP_NAME": "구축2부",
"RUI_EXPIRE_FLAG": "0"
}
],
"Encrypted_Header_Size": 2208,
"Header_Hash": "[-23, 112, -60, 45, -63, -2, 126, -61....]",
"Document_Type": 2,
"Algorithm": "AES",
"DESC": "SCDSA004\u0000\u0000",
"Create_Place": 0,
"SFI": {
"DOC_BRANCH_UID": "server5040",
"CREATE_PATH": "Test Server(44)/_test.xlsx",
"VERIFICATION_DATA": "",
"SERVER_ID": "SCAM-ED72-262C-433A-0004",
"WRITER_GROUP_HIERARCHY": "",
"EXTRA_INFO": "",
"WRITER_NAME": "Test Server(44)",
"WRITER_GROUP_NAME": "Test Server(44)",
"ENC_TYPE": "",
"DOCUMENT_GRADE": "",
"WRITER_ID": "Test Server(44)",
"DOC_PARENT_BRANCH_UID": "server5038",
"DOC_UID": "",
"CREATE_TIME": "2023-04-14 11:31",
"SERVER_NAME": "SCI Server 44",
"DOCUMENT_TYPE": ""
},
"Normal_Doc_Size": 27057
} - [MAC]
{
"Custom_Type": 0,
"errcode": 0,
"Document_ID": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]",
"Server_ID_Hash": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]",
"RUI": [
{
"RUI_PRINT_NUM": "",
"RUI_RECENT_READ_TIME": "2012-08-14 13:45",
"RUI_USER_NAME": "신성범",
"RUI_READ_NUM": "",
"RUI_USER_ID": "sbshin",
"RUI_GROUP_NAME": "제품개발부",
"RUI_EXPIRE_FLAG": "0"
}
],
"Encrypted_Header_Size": 1296,
"Header_Hash": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]",
"Document_Type": 0,
"Algorithm": "AES",
"DESC": "SCDSA002\u0000\u0000",
"MAC": {
"MAC_CATEGORY_NAME": "범주1",
"MAC_CATEGORY": "0000001"
},
"Create_Place": 0,
"SFI": {
"DOC_BRANCH_UID": "server5040",
"CREATE_PATH": "Test Server(44)/_test.xlsx",
"VERIFICATION_DATA": "",
"SERVER_ID": "SCAM-ED72-262C-433A-0004",
"WRITER_GROUP_HIERARCHY": "",
"EXTRA_INFO": "",
"WRITER_NAME": "Test Server(44)",
"WRITER_GROUP_NAME": "Test Server(44)",
"ENC_TYPE": "",
"DOCUMENT_GRADE": "",
"WRITER_ID": "Test Server(44)",
"DOC_PARENT_BRANCH_UID": "server5038",
"DOC_UID": "",
"CREATE_TIME": "2023-04-14 11:31",
"SERVER_NAME": "SCI Server 44",
"DOCUMENT_TYPE": ""
},
"Normal_Doc_Size": 0
}
- 실패 시
비고
- ** 선언 시 properties에 Key 파일 경로를 설정 하거나 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
- SLDsEncDecHeader()
=> properties 에 DSKEYENCRYPT_KEYFILE 설정 필요(Document Security 하드코딩된 암호화 키 노출 취약점 개선) - SLDsEncDecHeader(String KeyFilePath)
- SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
// 키 파일 입력 할 경우
String keyDACPath = "S:\\TFS_Project2\\Linker\\ServiceLinker\\src\\JavaServiceLinker\\keyfiles\\test44\\KeyDAC_44.sc";
SLDsEncDecHeader DsEncDecHeader = new SLDsEncDecHeader(keyDACPath);
// 키 직접 입력 할 경우
SLDsEncDecHeader SLDSHeader = new SLDsEncDecHeader("DS Server Header Key", "Custom Header Key");
String header = ds.dsGetFullHeaderEx("c:\\temp\\test1.docx");
}
}
▶ public int CheckKeyFile(...) : Key 파일을 검증한다.
- 제어방식 : ALL
- 패키지명 : SCSL
- 클래스명 : SLDsFile
- 설명 : Key 파일을 검증 한다.
Parameter
타입 | 변수명 | 설명 | 비고 |
---|---|---|---|
[IN] String | keyFileName | 키파일 경로 | 사용안함 |
[IN] int | keyVersion | 키파일의 버전(option) 0 : not define, 3 : version 3, 4 : version 4 | 사용안함 |
[IN] String | serverID | 서버 ID, 입력할 경우 비교하고 ""로 입력시 무시함 |
Return Value
- 0 : 성공
- 0이외의값 : 에러값 참조
- 2000 : NULL_PARAMETER
- 3001 : 키 파일에 key data가 없음
3014 : 키 파일의 타입을 알 수 없음3050 : 암호화 방식 다름- 3051 : ServerID 다름
3052 : key version 다름
비고
- 없음
예제
import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile sFile = new SLDsFile();
sFile.SettingPathForProperty( "D:\\propertisData\\softcamp.properties" );
ret = sFile.CheckKeyFile(keyDACPath, 4, "SCAM-ED72-262C-433A-0000");
}
}