자바 Class를 Proc groovy 프로시져를 통하여 호출하여서 SAS 데이터 세트를 암호화 하는 프로그램입니다. 제가 Java를 잘 몰라서 자세한 설명은 못하겠지만, Proc Groovy 프로시져를 통하여 자바 프로그램을 SAS에서 호출하여서 사용가능 할 듯 합니다. 참고하시기를 바랍니다.
* 예제1 출처 : https://gist.github.com/FriedEgg/79ad315afa1b315e8ac3;
/* This is to encode items in a data set instead of a macro variable, using javaobj */
* SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 서로 관련된 암호학적 해시 함수들의 모음;
* SHA1 암호화;
filename cp temp;
proc groovy classpath=cp;
submit parseonly;
import java.security.MessageDigest
class Sha1 {
public String encode(String message) {
return new BigInteger(1, MessageDigest.getInstance("SHA1").digest(message.getBytes())).toString(16);
}
}
endsubmit;
quit;
* groovy 프로시져에서 사용하던 classpaht 설정;
options set=classpath "%sysfunc(pathname(cp,f))";
data class1;
* Sha1 class 호출;
dcl javaobj sha1('Sha1');
do until (done);
set class end=done;
length encoded_name $ 40;
sha1.callStringMethod('encode', strip(name), encoded_name);
output;
end;
run;
* 예제2 출처 : https://communities.sas.com/t5/Base-SAS-Programming/Enable-SHA1-Hash-MessageDigest-in-SAS-with-Javao...;
filename cp temp;
proc groovy classpath=cp;
submit parseonly;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Sha1 {
public static String text;
public static void main(String[] args) throws NoSuchAlgorithmException {
for (String item : args) {
text = item;
System.out.println("Text: " + item + " SHA1: " + getSha());
}
}
public static String getSha() throws NoSuchAlgorithmException {
byte[] digest = MessageDigest.getInstance("SHA1").digest(text.getBytes());
return new BigInteger(1, digest).toString(16);
}
}
endsubmit;
quit;
data foo;
length text sha1 $40;
declare javaobj s('Sha1');
do text='abc','abcd';
s.setStaticStringField('text',text);
s.callStaticStringMethod('getSha',sha1);
put 'Text: ' text ' SHA1: ' sha1;
output;
end;
run;
data class;
if 0 then set sashelp.class;
length sha1 $40;
declare hash c(dataset:'sashelp.class',ordered:'y');
declare hiter i('c');
c.definekey('sex','name');
c.definedata(all:'y');
c.definedone();
declare javaobj j('Sha1');
_n_=i.first();
do while(_n_=0);
j.setStaticStringField('text',name);
j.callStaticStringMethod('getSha',sha1);
output;
_n_=i.next();
end;
stop;
run;
* 출처 : http://cafe.daum.net/statsas/3F8j/320
*********************************************************
#통계 #빅데이터 #통계분석연구회 #데이터과학자 #bigdata #dataviz #statistics #Analytics
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.