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 부터 순차적으로 다음과 같이 구성되어 있다.
-
데이터 크기