Skip to main content

2) SDF App API 명세서

Java Class API 함수 설명

▶ void SettingPathForProperty() : 설정 정보 파일의 경로를 알려주는 함수

  • 제어방식 :
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : 설정 정보 파일의 path를 알려주는 함수

Parameter

타입변수명설명비고
[IN] StringpropertyPath설정 정보 파일(softcamp.properties)의 경로를 설정한다.파일명 포함
예) c:/softcamp.properties

Return Value

  • 없음

비고

설정 정보 파일을 사용하지 않는 경우, 기본 설정으로 동작하지만 4.x 키 파일을 사용하는 경우, 보안성 강화 기능으로 인하여 반드시 설정 정보 파일을 사용하여야 합니다.

이름설정값설명기본값
LogWrite0 이면 로그 남기지 않음로그 파일 생성 여부1
LogPath로그 파일 생성 경로로그 파일 생성 경로./log/
FileExt구분자는 ‘;’ 이며 소문자 사용지원 확장자 목록doc;xls;ppt;csv;hwp;gul;txt;pdf;bmp;jpg;jpeg;gif;tif;tiff;rtf;jtd;pptx;docx;xlsx;tmp
ServiceIDID키 파일 인증 관련 서비스 ID
useServiceLinkerIcon0 이면 미사용서비스링커 아이콘 지원 ( SCDSA004 문서는 해당되지 않음 )0
nEncCache1 이면 Cache Mode암호화 시, 대상 파일이 존재하는 경우 파일 암호화 하지 않음 ( MAC 암호화 API만 지원 )0
nMaxLoopCache1 보다 큰 값Cache Mode에서 대기 상태인 경우, 최대 대기 루프 횟수300
FileBufferSize1 보다 큰 값File I/O 시, 읽어들이는 버퍼의 크기65536
LogFilter구분자는 ‘;’ 사용로그 파일에 남기려는 로그의 종류ERROR; INFO; WARNING;
AlgorithmAES or ARIA문서 암호화 시, 사용되는 암호화 알고리즘 (ARIA로 설정 시, 키 알고리즘은 RSA를 사용)AES
DocumentVersion4 이면, SCDSA004 문서문서 헤더 버전 (Algorithm 설정 값이 AES가 아닌 경우, DocumentVersion 은 4로 설정됨)3
AnsiCharsetCharacter Set시스템의 기본 Locale과 다른 Character Set을 사용하는 경우 설정시스템의 기본 Locale
KeyFileOffset0 이면 미사용키 파일 메모리 로딩 시, 성능향상을 위하여 키 파일의 일부만을 로딩하여 처리하는 기능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] StringuserID사용자 ID
[IN] Stringauth권한 문자열권한 문자열 참조 https://wiki.softcamp.co.kr/x/ng1YB
[IN] int/StringexpireDate유효기간 설정int - 0: 기한없음, 1: 당일만, 2: 명일까지, n: n일까지
String - YYYYMMDD 형식 예) "20231231"
[IN] intreadLimit읽기 횟수0: 읽기횟수 제한 없음, n: 읽기 n회 가능
[IN] intprintLimit프린트 횟수0: 출력횟수 제한 없음, n: 출력 n회 가능

Return Value

  • 0 : 성공
  • 이외의 값 : 실패

비고

  • 없음

▶ int SLDsAddGroupDAC() : 그룹 추가 함수

  • 제어방식 : DAC
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : 보안문서의 헤더의 보안정책에 그룹을 추가하는 함수

Parameter

타입변수명설명비고
[IN] StringgroupID그룹 ID
[IN] Stringauth권한 문자열권한 문자열 참조 https://wiki.softcamp.co.kr/x/ng1YB
[IN] int/StringexpireDate유효기간 설정int - 0: 기한없음, 1: 당일만, 2: 명일까지, n: n일까지
String - YYYYMMDD 형식 예) "20231231"
[IN] intreadLimit읽기 횟수0: 읽기횟수 제한 없음, n: 읽기 n회 가능
[IN] intprintLimit프린트 횟수0: 출력횟수 제한 없음, n: 출력 n회 가능

Return Value

  • 0 : 성공
  • 이외의 값 : 실패

비고

  • 없음

▶ int SLDsAddUserDACCL() : User DAC 정보를 추가

  • 제어방식 : DAC
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : 보안문서의 헤더의 보안정책에 그룹을 추가하는 함수

Parameter

타입변수명설명비고
[IN] StringSERVERID서버 ID
[IN] StringuserID사용자 ID
[IN] Stringauth권한 문자열권한 문자열 참조 https://wiki.softcamp.co.kr/x/ng1YB
[IN] int/StringexpireDate유효기간 설정int - 0: 기한없음, 1: 당일만, 2: 명일까지, n: n일까지
String - YYYYMMDD 형식 예) "20231231"
[IN] intreadLimit읽기 횟수0: 읽기횟수 제한 없음, n: 읽기 n회 가능
[IN] intprintLimit프린트 횟수0: 출력횟수 제한 없음, n: 출력 n회 가능

Return Value

  • 0 : 성공
  • 이외의 값 : 실패

비고

  • 없음

▶ public void SLDsInitGrade() : 초기화 함수

  • 제어방식 : DAC
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : 서비스링커를 사용하기 위한 초기화 작업 함수

Parameter

  • 없음

Return Value

  • 없음

비고

  • SLDsAddUserGrade() 으로 추가된 정보를 초기화

▶ int SLDsAddUserGrade() : 등급 문서 접근 대상 사용자 추가 함수

  • 제어방식 : DAC
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : 보안문서의 헤더의 보안정책에 사용자를 추가하는 함수

Parameter

타입변수명설명비고
[IN] StringuserID사용자 ID, 그룹ID, 등급 ID** 등급 ID 설정 시
- 유효기간만 설정 가능
- auth 에 0000000 으로 설정 해야 함.
[IN] Stringauth권한 문자열권한 문자열 참조 https://wiki.softcamp.co.kr/x/ng1YB
[IN] int/StringexpireDate유효기간 설정int - 0: 기한없음, 1: 당일만, 2: 명일까지, n: n일까지
String - YYYYMMDD 형식 예) "20231231"
[IN] intreadLimit읽기 횟수0: 읽기횟수 제한 없음, n: 읽기 n회 가능
[IN] intprintLimit프린트 횟수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] StringkeyFilePath키파일 이름(경로포함)
[IN] StringsrcFilePath원본파일 이름(경로포함)
[IN] StringdstFilePath암호화한 파일 이름(경로포함)
[IN] intoption원본파일이 암호화 파일일 경우 재 암호화 옵션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] StringkeyFilePath키파일 이름(경로포함)
[IN] StringsystemName연동 시스템 이름생성자 정보에 연동시스템 이름이 들어감.
[IN] StringsrcFilePath원본파일 이름(경로포함)
[IN] StringdstFilePath암호화한 파일 이름(경로포함)
[IN] intoption원본파일이 암호화 파일일 경우 재 암호화 옵션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] StringkeyFilePath키파일 이름(경로포함)
[IN] StringgroupID권한을 구분 적용하는 그룹 ID사용자 ID도 가능
[IN] StringsrcFilePath원본파일 이름(경로포함)암호화 문서
[IN] StringdstFilePath암호화한 파일 이름(경로포함)복호화 문서
[IN] StringauthInfo권한 정보(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] StringkeyFilePath키파일 이름(경로포함)
[IN] StringcategoryID권한 구분을 위한 범주 ID
[IN] StringcategoryName권한 구분을 위한 범주 이름범주 명이 정해지지 않았을 시 'Server'입력
[IN] StringsrcFilePath원본파일 이름(경로포함)원본 문서
[IN] StringdstFilePath암호화한 파일 이름(경로포함)암호화 문서
[IN] intoption원본파일이 암호화 파일일 경우 재 암호화 옵션0: 암호화하지않음 1: 복호화후 재암호화

Return Value

비고

  • 없음

예제

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] StringkeyFilePath키파일 이름(경로포함)
[IN] StringcategoryID권한 구분을 위한 범주 ID
[IN] StringcategoryName권한 구분을 위한 범주 이름범주 명이 정해지지 않았을 시 'Server'입력
[IN] StringsystemName연동 시스템 이름생성자 정보에 연동시스템 이름이 들어감.
[IN] StringsrcFilePath원본파일 이름(경로포함)원본 문서
[IN] StringdstFilePath암호화한 파일 이름(경로포함)암호화 문서
[IN] intoption원본파일이 암호화 파일일 경우 재 암호화 옵션0: 암호화하지않음 1: 복호화후 재암호화

Return Value

비고

  • 파라미터로 받은 시스템이름은 암호화된 파일의 문서보안 정보보기 탭에서 생성자 정보로 사용됨

예제

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] StringkeyFilePath키파일 이름(경로포함)
[IN] StringcategoryID권한 구분을 위한 범주 ID
[IN] StringcategoryName권한 구분을 위한 범주 이름범주 명이 정해지지 않았을 시 'Server'입력
[IN] StringsystemName연동 시스템 이름생성자 정보에 연동시스템 이름이 들어감.
[IN] StringsrcFilePath원본파일 이름(경로포함)원본 문서
[IN] StringdstFilePath암호화한 파일 이름(경로포함)암호화 문서
[IN] StringexpireDate유효기간"20250101” 같은 형식
[IN] StringautoDestroy파괴 옵션"0" : 열지 못하게, "4" : 파기
[IN] intoption원본파일이 암호화 파일일 경우 재 암호화 옵션0: 암호화하지않음 1: 복호화후 재암호화

Return Value

비고

  • 없음

예제

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] StringkeyFilePath키파일 이름(경로포함)
[IN] StringcategoryID권한 구분을 위한 범주 ID
[IN] StringsrcFilePath원본파일 이름(경로포함)원본 문서
[IN] StringdstFilePath암호화한 파일 이름(경로포함)암호화 문서
[IN] StringauthInfo권한 정보(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] StringfilePath체크파일 이름(경로포함)

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] StringfilePath체크파일 이름(경로포함)

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] StringfilePath체크파일 이름(경로포함)

Return Value

비고

  • 없음

예제

DSSimpleEncFileDAC 함수에 있음.

▶ public int DSSimpleEncFile(...) : MAC 방식의 Simple 파일 암호화 함수

  • 제어방식 : MAC
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : MAC 방식의 파일 암호화를 한다.
    • 지원하지 않는 확장자에 대해서도 ".dsd"를 붙여 암호화를 하고 0을 리턴한다
    • a.log 암호화 => a.log.dsd

Parameter

타입변수명설명비고
[IN] StringkeyFilePath키파일 이름(경로포함)
[IN] StringcategoryID권한 구분을 위한 범주 ID
[IN] StringcategoryName정의된 범주 이름범주 명이 정해지지 않았을 시 'Server'입력
[IN] StringsrcFilePath원본파일 이름(경로포함)원본 문서
[IN] StringdstFilePath암호화한 파일 이름(경로포함)암호화 문서
[IN] intoption원본파일이 암호화 파일일 경우 재 암호화 옵션0: 암호화하지않음 1: 복호화후 재암호화

Return Value

비고

  • 없음

예제

DSSimpleEncFileDAC 함수에 있음.

▶ public int DSSimpleEncFileDAC(...) : DAC 방식의 Simple 파일 암호화 함수

  • 제어방식 : DAC
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : DAC 방식의 파일 암호화를 한다.
    • 지원하지 않는 확장자에 대해서도 ".dsd"를 붙여 암호화를 하고 0을 리턴한다
    • a.log 암호화 => a.log.dsd

Parameter

타입변수명설명비고
[IN] StringkeyFilePath키파일 이름(경로포함)
[IN] StringsrcFilePath원본파일 이름(경로포함)원본 문서
[IN] StringdstFilePath암호화한 파일 이름(경로포함)암호화 문서
[IN] intoption원본파일이 암호화 파일일 경우 재 암호화 옵션0: 암호화하지않음 1: 복호화후 재암호화

Return Value

비고

  • 지원되지 않는 확장자의 경우 읽기, 해제, 반출, 권한변경의 권한을 넣어준다.
  • 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] StringkeyFilePath키파일 이름(경로포함)
[IN] StringcategoryID권한 구분을 위한 범주 ID
[IN] StringcategoryName정의된 범주 이름범주 명이 정해지지 않았을 시 'Server'입력
[IN] StringsystemName연동 시스템 이름생성자 정보에 연동시스템 이름이 들어감.
[IN] StringsrcFilePath원본파일 이름(경로포함)원본 문서
[IN] StringdstFilePath암호화한 파일 이름(경로포함)암호화 문서
[IN] intoption원본파일이 암호화 파일일 경우 재 암호화 옵션0: 암호화하지않음 1: 복호화후 재암호화

Return Value

비고

  • 파라미터로 받은 시스템이름은 암호화된 파일의 문서보안 정보보기 탭에서 생성자 정보로 사용됨

예제

DSSimpleEncFileDACV2 함수에 있음.

▶ public int DSSimpleEncFileDACV2(...) : DAC 방식의 Simple 파일 암호화 함수

  • 제어방식 : DAC
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : DAC 방식의 파일 암호화를 한다.
    • 지원하지 않는 확장자에 대해서도 ".dsd"를 붙여 암호화를 하고 0을 리턴한다
    • a.log 암호화 => a.log.dsd

Parameter

타입변수명설명비고
[IN] StringkeyFilePath키파일 이름(경로포함)
[IN] StringsystemName연동 시스템 이름생성자 정보에 연동시스템 이름이 들어감.
[IN] StringsrcFilePath원본파일 이름(경로포함)
[IN] StringdstFilePath암호화한 파일 이름(경로포함)
[IN] intoption원본파일이 암호화 파일일 경우 재 암호화 옵션0: 암호화하지않음 1: 복호화후 재암호화

Return Value

비고

  • 파라미터로 받은 시스템이름은 암호화된 파일의 문서보안 정보보기 탭에서 생성자 정보로 사용됨
  • 지원되지 않는 확장자의 경우 읽기, 해제, 반출, 권한변경의 권한을 넣어준다.
  • 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] StringkeyFilePath키파일 이름(경로포함)
[OUT]byte[]sfiInfo파일 정보를 담고 있는 byte 배열파일정보을 담을 사이즈 만큼 byte 배열 공간을 할당해줘야 한다.
파일 헤더 정보의 사이즈는 396 이다.

Return Value

비고

  • ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, 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)

예제

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] StringkeyFilePath키파일 이름(경로포함)
[OUT]byte[]sfiInfo파일 정보를 담고 있는 byte 배열파일정보을 담을 사이즈 만큼 byte 배열 공간을 할당해줘야 한다.
파일 헤더 정보의 사이즈는 2791 이다.

Return Value

비고

  • ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, 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)

예제

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] StringkeyFilePath키파일 이름(경로포함)
[OUT]byte[]macInfoMAC 정보를 담고 있는 byte 배열MAC 정보를 담을 사이즈 만큼 byte 배열 공간을 할당해줘야 한다.
파일 헤더 정보의 사이즈는 50 이다.

Return Value

비고

  • ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, 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)

예제

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] StringkeyFilePath키파일 이름(경로포함)
[OUT]byte[]macInfoMAC 정보를 담고 있는 byte 배열MAC 정보를 담을 사이즈 만큼 byte 배열 공간을 할당해줘야 한다.
파일 헤더 정보의 사이즈는 70 이다.

Return Value

비고

  • ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, 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)

예제

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] StringfilePath키파일 이름(경로포함)

Return Value

비고

  • ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, 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)

예제

GetDacOfHeader 참조

▶ public int GetDacOfHeaderV2(...) : 암호화된 파일 헤더의 DAC 정보를 알아내는 함수

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsEncDecHeader
  • 설명 : 암호화된 파일 헤더의 DAC 정보를 알아내는 함수

Parameter

타입변수명설명비고
[IN] StringfilePath키파일 이름(경로포함)
[OUT]byte[]dacInfoDAC정보를 담고 있는 byte 배열DAC정보을 담을 사이즈 만큼 byte 배열 공간을 할당해야 한다.
하나의 DAC 정보 사이즈는 4200 이다.
예) DAC 정보가 3개이면 4200 * 3 사이즈만큼 공간을 할당해야 한다.

|

Return Value

비고

  • ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, 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)

예제

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] StringfilePath키파일 이름(경로포함)

Return Value

비고

  • ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, 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)

예제

GetRuiOfHeader 참조

▶ public int GetRuiOfHeader(...) : 암호화된 파일 헤더의 RUI 정보를 알아내는 함수

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsEncDecHeader
  • 설명 : 암호화된 파일 헤더의 RUI 정보를 알아내는 함수

Parameter

타입변수명설명비고
[IN] StringfilePath키파일 이름(경로포함)
[OUT]byte[]ruiInfoRUI정보를 담고 있는 byte 배열RUI정보을 담을 사이즈 만큼 byte 배열 공간을 할당해야 한다.
하나의 RUI 정보 사이즈는 145 이다.
예) RUI 정보가 3개이면 145 * 3 사이즈만큼 공간을 할당해야 한다.

|

Return Value

비고

  • ※ 문서 헤더 암호화 키를 사용하는 경우 사용할 수 없으며, 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)

예제

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] intcheckExt체크할 값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] StringfilePath파일 경로(파일명포함)
[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] StringdocuKeyFilePath키파일 이름(경로포함)등급암호화 키 파일의 경로 및 파일명을 넣어야 함.
[IN] StringsystemName해당 시스템 명
[IN] StringdocuKind문서종류사용하지 않을 시에는 "none”을 넣음.
[IN] StringdocuGradeID등급문서 ID필수
[IN] StringloginID로그인한 아이디
[IN] StringgroupPath해당 아이디의 그룹경로그룹 하이러키를 말하며, 서비스링커외 다른 모듈의 API를 통하여 얻을 수 있음
[IN] StringextraInfo커스텀 필드사용하지 않을 시에는 "none” 으로 입력
[IN] StringsrcFilePath원본파일 이름(경로포함)
[IN] StringdstFilePath암호화한 파일 이름(경로포함)
[IN] intsimple단순 암호화 사용 여부0 : 단순암호화 기능 사용하지 않음
1 : 단순암호화 기능 사용
[IN] intoption원본파일이 암호화 파일일 경우 재 암호화 옵션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] StringdocuKeyFilePath키파일 이름(경로포함)등급암호화 키 파일의 경로 및 파일명을 넣어야 함.
[IN] StringsystemName해당 시스템 명
[IN] StringdocuKind문서종류사용하지 않을 시에는 "none”을 넣음.
[IN] StringdocuGradeID등급문서 ID필수
[IN] StringloginID로그인한 아이디
[IN] StringgroupPath해당 아이디의 그룹경로그룹 하이러키를 말하며, 서비스링커외 다른 모듈의 API를 통하여 얻을 수 있음
[IN] StringextraInfo커스텀 필드사용하지 않을 시에는 "none” 으로 입력
[IN] StringsrcFilePath원본파일 이름(경로포함)
[IN] StringdstFilePath암호화한 파일 이름(경로포함)
[IN] StringcreatorID생성자 ID
[IN] StringcreatorGroupPath생성자 그룹경로그룹 하이러키를 말하며, 서비스링커외 다른 모듈의 API를 통하여 얻을 수 있음.
[IN] StringkeyFileDACName키파일 이름(경로포함)생성자 키를 가진 DAC 키 파일 이름
[IN] intsimple단순 암호화 사용 여부0 : 단순암호화 기능 사용하지 않음
1 : 단순암호화 기능 사용
[IN] intoption원본파일이 암호화 파일일 경우 재 암호화 옵션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 boolean isSOMFile(...) : SOM 파일인지 여부를 판단하는 함수

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLBsUtil
  • 설명 : 파라미터로 넘겨받은 파일이 SOM파일인지를 확인한다

Parameter

타입변수명설명비고
[IN] StringfilePath파일 경로(파일명포함)

Return Value

  • false : SOM 파일이 아님
  • true : SOM 파일

비고

  • 없음

예제

import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SCSL.SLBsUtil util = new SCSL.SLBsUtil();
boolean isSomFile = util.isSOMFile("C:/somfile.exe");
}
}

▶ public int getSOMFileType(...) : SOM 파일 타입을 확인하는 함수

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLBsUtil
  • 설명 : SOM 파일 타입을 확인하는 함수

Parameter

타입변수명설명비고
[IN] StringfilePath파일 경로(파일명포함)

Return Value

  • -1 : SOM 파일이 아님
  • 0 : Normal SOM File
  • 1 : OLE SOM File
  • 2 : Simple SOM File

비고

  • 없음

예제

import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SCSL.SLBsUtil util = new SCSL.SLBsUtil();
int fileType = util.getSOMFileType("C:/somfile.exe");
}
}

▶ public String getInfo(...) : 암호화 파일 헤더 정보를 얻는 함수

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsEncFile
  • 설명 : 암호화 파일 헤더 정보를 얻는 함수

Parameter

타입변수명설명비고
[IN] Stringtype헤더 타입 식별자예제 코드 참고

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] intindexMAC 인덱스0 ~ getInfoMACCount() - 1
[IN] Stringtype헤더 타입 식별자예제 코드 참고

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] intindexDAC 인덱스0 ~ getInfoDACCount() - 1
[IN] Stringtype헤더 타입 식별자예제 코드 참고

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] Stringtype헤더 타입 식별자예제 코드 참고

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] intindexRUI 인덱스0 ~ getInfoRUICount() - 1
[IN] Stringtype헤더 타입 식별자예제 코드 참고

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] StringsrcFileName소스파일(암호화파일) 경로

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] StringkeyFileName키파일 경로사용안함
[IN] intkeyVersion키파일의 버전(option) 0 : not define, 3 : version 3, 4 : version 4사용안함
[IN] StringserverID서버 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");
}
}

▶ public void SLDsEncDecEnvSet(...) : 암복호화 시 설정 값 셋팅 함수

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : 암복호화 시 사용 되는 설정 값들을 셋팅 한다
    • properties 파일에 있는 값 보다 우선
    • DAC 관련 API 만 지원 한다. (SLDsEncFileDAC, SLDsEncFileDACV2, SLDsEncFileDACV2AddCreator, SLDsEncFileDACV3, CreateDecryptFileDAC)
    • 해당 함수를 사용 하기 전에 SLDsInitDAC(); 함수 에서 초기화 해야 한다.
    • SCSL.SLDsFile() 선언을 static으로 하면 안 된다.

Parameter

타입변수명설명비고
[IN] Stringkey설정할 key - SLDsFile에 정된 key 값
예)
SLDsFile.SLDS_ENC_DEC_POLICY_KEYSERVICEID
SLDsFile.SLDS_ENC_DEC_POLICY_ALGORITHM
SLDsFile.SLDS_ENCDEC_SET_SFI
[IN] intvalue키에 맞는 데이터 값
- SLDsFile.SLDS_ENC_DEC_POLICY_KEYSERVICEID
    => 키 서비스 아이디
- SLDsFile.SLDS_ENC_DEC_POLICY_ALGORITHM
    => Json 으로 업데이트 할 헤더 설정
    => 아래 예제 참조

Return Value

  • 0 : 성공
  • 0이외의값 : 에러값 참조

비고

예제

import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
// ARIA 암호화인 경우
SCSL.SLDsFile sFile = new SCSL.SLDsFile();

sFile.SLDsInitDAC();
sFile.SLDsEncDecEnvSet(SLDsFile.SLDS_ENCDEC_KEYSERVICEID, "02"); //키 서비스 아이디가 02 인 경우
sFile.SLDsEncDecEnvSet(SLDsFile.SLDS_ENCDEC_ALGORITHM, SLDsFile.SLDS_ENCDEC_ALGORITHM_ARIA); //ARIA 암호화

sFile.SLDsAddUserDAC("hkmc01", "011100110", 0, 0, 0);
sFile.SLDsAddUserDAC("test01", "011100110", 0, 0, 0);
int ret = sFile.SLDsEncFileDACV2(keyDACPath, "Server", srcFilePath, encFile, 0);


// AES 암호화인 경우
SCSL.SLDsFile sFile = new SCSL.SLDsFile();

sFile.SLDsInitDAC();
sFile.SLDsEncDecEnvSet(SLDsFile.SLDS_ENCDEC_KEYSERVICEID, "31"); //키 서비스 아이디가 31 인 경우
sFile.SLDsEncDecEnvSet(SLDsFile.SLDS_ENCDEC_ALGORITHM, SLDsFile.SLDS_ENCDEC_ALGORITHM_AES); //AES 암호화

sFile.SLDsAddUserDAC("test01", "011100110", 0, 0, 0);
int ret = sFile.SLDsEncFileDACV2(keyDACPath, "Server", srcFilePath, encFile, 0);
}
}

▶ public int DSSetHeaderInfo(...) : 보안 문서의 헤더를 업데이트 한다.

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : 보안 문서의 헤더를 업데이트 한다.
    • SLBsInfoType.DSBSIT_SFI, SLBsInfoType.DSBSIT_RUI 만 지원
      • public static final int DSBSIT_SFI=1010;
      • public static final int DSBSIT_RUI=1050;

Parameter

타입변수명설명비고
[IN] StringkeyFileName키파일 경로(없을 경우 null)
[IN] StringsrcPath보안 문서
[IN] StringdestPath업데이트 할 대상 문서(null 인 경우 srcPath 문서를 업데이트 한다)
[IN] StringjsonData업데이트 할 jsonData
[IN] StringdataAdd0: 데이터가 있을 때만 업데이트 , 1: 데이터 가 없음 경우 추가
  • jsonData 예시
    {
    "1010": {
    "5040": "server5040",
    "5028": "server5028",
    "5038": "server5038"
    }
    }
    // ** 주의 root 는 한 개만 있어야 함

Return Value

  • 0 : 성공
  • 0이외의값 : 에러값 참조
  • -95 : 추가/업데이트 할 데이터가 없음
  • -96 : 지원하지 않는 데이터 타입
  • 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)
{
SCSL.SLDsFile sFile = new SCSL.SLDsFile();

JSONObject mainObj = new JSONObject();
JSONObject parmObj = new JSONObject();

parmObj.put(SLBsDataType.DSBSDT_SFI_DOC_UID, "server5028");
parmObj.put(SLBsDataType.DSBSDT_SFI_DOC_PARENT_BRANCH_UID, "server5038");
parmObj.put(SLBsDataType.DSBSDT_SFI_DOC_BRANCH_UID, "server5040");

mainObj.put(SLBsInfoType.DSBSIT_SFI,parmObj);

String strJsonData = mainObj.toString();
sFile.DSSetHeaderInfo(keyDACPath,encFile,null,strJsonData,0);
}
}

▶ public String dsGetHeaderInfo(...) : 암호화 파일의 헤더에서 특정 데이터를 조회합니다.

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsEncDecHeader
  • 설명 : 해당 파일의 특정 데이터를 조회한다.

Parameter

타입변수명설명비고
[IN] StringdataType조회할 데이터 아이디
예) DOC_UID
[IN] StringfilePath파일 경로(파일명포함)

Return Value

  • 0: MAC 방식 암호화 파일
  • 1: DAC 방식 암호화 파일
  • 2: 등급 방식 암호화 파일
  • -1 : 비정상 암호화 파일
  • -36 : 일반 파일
  • 이외의 값: 오류코드 참조 https://wiki.softcamp.co.kr/x/ow1YB

비고

  • 없음

예제

import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
// ** 선언 시 Key 파일 경로 또는 DS HeaderKey 와 Custom Key를 넣어 주어야 한다.
// SLDsEncDecHeader(String KeyFilePath)
// SLDsEncDecHeader(String DSHeaderKey, String CustomHeaderKey)

SLDsEncDecHeader SLDSHeader = new SLDsEncDecHeader(keyDACPath);
String strDocUID = SLDSHeader.dsGetHeaderInfo("DOC_UID", encFile);
}
}

▶ public int CreateEncryptFileAIP(...) : 일반 문서를 AIP 문서로 변환

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : 일반 문서를 AIP 문서로 변환

Parameter

타입변수명설명비고
[IN] StringlabelId적용할 레이블 id
[IN] StringlabelName적용할 레이블 name
(labelId 없는 경우 labelName 사용하여 적용)
[IN] StringsrcFilePath원본 일반 문서 경로
[IN] StringdstFilePath변환된 AIP 문서 경로
[IN] StringextraInfoJSON 형식의 추가 정보 입력(아래의 extraInfo 데이터 설명표 및 샘플 데이터 참고)
[IN] intsetProtect프로텍트 설정 여부0: 미사용, 1 : 사용
extraInfo 데이터 설명표
KeyRequiredTypeDescription
sourcerequiredjson
namerequiredstring호출 시스템 이름
fromrequiredstring호출 시스템 URL
userjson
idstring사용자 아이디
namestring사용자 이름
departstring사용자 전체 부서 (상위그룹/중위그룹/하위그룹)
dutystring사용자 직책 이름

Return Value

타입변수명설명비고
[IN] intcode0 : 성공
0 이외의 값 : 에러
[IN] Stringmessage"OK" : 성공
이외의 값 에러 메시지

비고

  • 없음

예제

import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile slFile = new SLDsFile();
slFile.SettingPathForProperty( "D:\\propertisData\\softcamp.properties" );

int retVal = slFile.CreateEncryptFileAIP(
"070b7e3a-bb66-47e0-8196-7d030d54190d",
"",
"D:\\opt\\shieldrm\\data\\테스트.pptx",
"D:\\opt\\shieldrm\\data\\AIP.pptx",
"",
0
);

System.out.println("retVal : " + retVal);
}
}

▶ public int CreateDecryptFileAIP(...) : AIP 문서를 일반 문서로 변환

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : AIP 문서를 일반 문서로 변환

Parameter

타입변수명설명비고
[IN] StringsrcFilePath원본 AIP 문서 경로
[IN] StringdstFilePath해제된 일반 문서 경로
[IN] StringextraInfoJSON 형식의 추가 정보 입력(아래의 extraInfo 데이터 설명표 및 샘플 데이터 참고)
extraInfo 데이터 설명표
KeyRequiredTypeDescription
sourcerequiredjson
namerequiredstring호출 시스템 이름
fromrequiredstring호출 시스템 URL
userjson
idstring사용자 아이디
namestring사용자 이름
departstring사용자 전체 부서 (상위그룹/중위그룹/하위그룹)
dutystring사용자 직책 이름

Return Value

타입변수명설명비고
[IN] intcode0 : 성공
0 이외의 값 : 에러
[IN] Stringmessage"OK" : 성공
이외의 값 에러 메시지

비고

  • 없음

예제

import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile slFile = new SLDsFile();
slFile.SettingPathForProperty( "D:\\propertisData\\softcamp.properties" );

int retVal = slFile.CreateDecryptFileAIP(
"D:\\opt\\shieldrm\\data\\AIP.pptx",
"D:\\opt\\shieldrm\\data\\AIP_dec.pptx",
""
);

System.out.println("retVal : " + retVal);
}
}

▶ public String GetLabelInfoAIP(...) : AIP 문서의 레이블 정보 조회

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : AIP 문서의 레이블 정보 조회

Parameter

타입변수명설명비고
[IN] StringsrcFilePath원본 AIP 문서 경로

Return Value

  • Json Value 로 리턴 함
    • 성공 시
      // label 조회 성공
      {
      "code": 0,
      "labelId": "070b7e3a-bb66-47e0-8196-7d030d54190d",
      "labelName": "Protected by SHIELDRM(DEV)"
      }

      // 일반 문서인 경우
      {
      "code": 1,
      "message": "This document is not Protected."
      }
    • 실패 시
      {
      "code": 40001,
      "message": "Invalid token"
      }

      {
      "code": 60001,
      "message": "com.microsoft.informationprotection.internal.gen.Error: NoAuthTokenError: Client application failed to provide authentication token for HTTP request., CorrelationId=a2d2f6b1-4265-482b-bc7d-18c88f8284bd, CorrelationId.Description=PolicyProfile"
      }

      {
      "code": 50001,
      "message": "400 : \"{\"code\":40011,\"message\":\"Unable to AzureInfo\",\"detail\":\"OpenidTenant is Empty\"}\""
      }

비고

  • 없음

예제

import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile slFile = new SLDsFile();
slFile.SettingPathForProperty( "D:\\propertisData\\softcamp.properties" );

int retVal = slFile.CreateDecryptFileAIP(
"D:\\opt\\shieldrm\\data\\AIP.pptx",
"D:\\opt\\shieldrm\\data\\AIP_dec.pptx",
""
);

System.out.println("retVal : " + retVal);
}
}

▶ public String getCustomProperties(...) : 은닉 정보 조회

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : 오피스 문서의 은닉정보 조회
    • 지원 확장자
      • Word : doc, docx, docm, dot, dotx, dotm, rtf, odt
      • Excel : xls, xlsx, xlsm, xlt, xltx, xltm, xlsb, xlam, ods
      • PowerPoint : ppt, pptx, pptm, pot, potx, potm, pps, ppsx, ppsm, odp

Parameter

타입변수명설명비고
[IN] StringfilePath대상 파일 경로

Return Value

  • Json Value 로 리턴 함
    • 성공 시
      {
      "code": 0,
      "info": "{\"filePath\":\"D:\\\\opt\\\\shieldrm\\\\data\\\\none.xlsx\",\"properties\":[{\"value\":\"1\",\"key\":\"key1\"},{\"value\":\"22\",\"key\":\"key2\"}]}"
      }
    • 실패 시
      // 지원하지 않는 확장자
      {
      "code": -1,
      "message": "Unsupported file type: D:\\opt\\shieldrm\\data\\테스트.txt"
      }

      // AIP 문서일 경우
      {
      "code": -1,
      "message": "Permission is required to open this file."
      }
      {
      "code": -1,
      "message": "Unknown file format."
      }

      // DS 문서일 경우
      {
      "code": -1,
      "message": "zip END header not found"
      }
      {
      "code": -1,
      "message": "Unsupported file format: Unknown"
      }

      // 내부 서비스 에러
      {
      "code": 40101,
      "message": "{\"code\":40107,\"message\":\"No matching license found\",\"detail\":\"License skms_connector_info information is empty.\"}"
      }

비고

  • 없음

예제

import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile slFile = new SLDsFile();
slFile.SettingPathForProperty( "D:\\propertisData\\softcamp.properties" );

String ret = slFile.getCustomProperties("D:\\opt\\shieldrm\\data\\none.xlsx");

JSONObject obj = new JSONObject(ret);
int code = obj.optInt("code");
String info = obj.optString("info");

System.out.println("code : " + code);
System.out.println("info : " + info);
}
}

▶ public String addDocCustomProperties(...) : 은닉 정보 추가

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : 오피스 문서의 은닉정보 추가
    • 지원 확장자
      • Word : doc, docx, docm, dot, dotx, dotm, rtf, odt
      • Excel : xls, xlsx, xlsm, xlt, xltx, xltm, xlsb, xlam, ods
      • PowerPoint : ppt, pptx, pptm, pot, potx, potm, pps, ppsx, ppsm, odp

Parameter

타입변수명설명비고
[IN] Stringobj저장할 파일 및 은닉 정보 목록JSONObject 형태의 String
 StringfilePath대상 파일 경로
 JsonArrayinfo저장할 은닉 정보 목록
  propertiesKeypropertiesKey은닉 정보 key이미 추가된 경우 value 업데이트
  propertyValuepropertyValue은닉 정보 value
{
"filePath": "D:\\opt\\shieldrm\\data\\none.xlsx",
"info": [
{
"propertiesKey": "key1",
"propertyValue": "1"
}
]
}

Return Value

  • Json Value 로 리턴 함
    • 성공 시
      {
      "code": 0
      }
    • 실패 시
      // 지원하지 않는 확장자
      {
      "code": -1,
      "message": "Unsupported file type: D:\\opt\\shieldrm\\data\\테스트.txt"
      }

      // AIP 문서일 경우
      {
      "code": -1,
      "message": "Permission is required to open this file."
      }
      {
      "code": -1,
      "message": "Unknown file format."
      }

      // DS 문서일 경우
      {
      "code": -1,
      "message": "zip END header not found"
      }
      {
      "code": -1,
      "message": "Unsupported file format: Unknown"
      }

      // 내부 서비스 에러
      {
      "code": 40101,
      "message": "{\"code\":40107,\"message\":\"No matching license found\",\"detail\":\"License skms_connector_info information is empty.\"}"
      }

비고

  • 없음

예제

import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile slFile = new SLDsFile();
slFile.SettingPathForProperty(propertiesPath);

JSONObject obj = new JSONObject();
JSONArray info = new JSONArray();

String filePath = "D:\\opt\\shieldrm\\data\\none.xlsx";

JSONObject item = new JSONObject();
item.put("propertiesKey", "key1");
item.put("propertyValue", "1");
info.put(item);

obj.put("filePath", filePath);
obj.put("info", info);

String ret = slFile.addDocCustomProperties(obj.toString());
System.out.println("ret : " + ret);
}
}

▶ public String removeCustomSetProperties(...) : 은닉 정보 삭제

  • 제어방식 : ALL
  • 패키지명 : SCSL
  • 클래스명 : SLDsFile
  • 설명 : 오피스 문서의 은닉정보 삭제
    • 지원 확장자
      • Word : doc, docx, docm, dot, dotx, dotm, rtf, odt
      • Excel : xls, xlsx, xlsm, xlt, xltx, xltm, xlsb, xlam, ods
      • PowerPoint : ppt, pptx, pptm, pot, potx, potm, pps, ppsx, ppsm, odp

Parameter

타입변수명설명비고
[IN] Stringobj삭제할 파일 및 은닉 정보 목록JSONObject 형태의 String
 StringfilePath대상 파일 경로
 JsonArrayinfo삭제할 은닉 정보 목록
  propertiesKeypropertiesKey은닉 정보 key
  propertyValuepropertyValue은닉 정보 value
{
"filePath": "D:\\opt\\shieldrm\\data\\none.xlsx",
"info": [
{
"propertiesKey": "key1",
"propertyValue": "1"
}
]
}

Return Value

  • Json Value 로 리턴 함
    • 성공 시
      {
      "code": 0
      }
    • 실패 시
      // 지원하지 않는 확장자
      {
      "code": -1,
      "message": "Unsupported file type: D:\\opt\\shieldrm\\data\\테스트.txt"
      }

      // AIP 문서일 경우
      {
      "code": -1,
      "message": "Permission is required to open this file."
      }
      {
      "code": -1,
      "message": "Unknown file format."
      }

      // DS 문서일 경우
      {
      "code": -1,
      "message": "zip END header not found"
      }
      {
      "code": -1,
      "message": "Unsupported file format: Unknown"
      }

      // 내부 서비스 에러
      {
      "code": 40101,
      "message": "{\"code\":40107,\"message\":\"No matching license found\",\"detail\":\"License skms_connector_info information is empty.\"}"
      }

비고

  • 없음

예제

import SCSL.*;
public final class MainTest
{
public static void main(String[] args)
{
SLDsFile slFile = new SLDsFile();
slFile.SettingPathForProperty(propertiesPath);

JSONObject obj = new JSONObject();
JSONArray info = new JSONArray();

String filePath = "D:\\opt\\shieldrm\\data\\none.xlsx";

JSONObject item = new JSONObject();
item.put("propertiesKey", "key1");
item.put("propertyValue", "1");
info.put(item);

obj.put("filePath", filePath);
obj.put("info", info);

String ret = slFile.removeCustomSetProperties(obj.toString());
System.out.println("ret : " + ret);
}
}