2016-10-13 2 views
0

사용자가 암호화 할 열을 선택할 수있는 반짝이는 앱을 만들려고합니다. 데이터를 암호화 할 열을 선택하면 각 행의 값이 이후 실행에서 항상 동일해야합니다. 는 똑같은. 나는. 고객 이름 = "John"이면이 프로세스를 실행할 때 항상 "A"를 얻습니다. 고객 이름이 "Jon"으로 변경되면 "C"를 얻을 수 있지만 "John"으로 다시 변경하면 다시 A를 얻습니다. 이것은 분석을 위해 민감한 데이터를 '마스크'하는 데 사용됩니다.다이제스트 - 하나만 수정하면 모든 행에 다른 값 가져 오기

또한 누군가가 나중에 사용할 키를 저장하여 이러한 열을 '암호 해독'하는 방법에 대해 의견을 낼 수 있다면 ... 감사하겠습니다.

I이 (필요 다이제스트 라이브러리)을 달성하려있어 방법의 단순한 버전 :

test <- data.frame(CustomerName=c("John Snow","John Snow","Daffy Duck","Daffy Duck","Daffy Duck","Daffy Duck","Daffy Duck","Joe Farmer","Joe Farmer","Joe Farmer","Joe Farmer"), 
       LoanNumber=c("12548","45878","45796","45813","45125","45216","45125","45778","45126","32548","45683"), 
       LoanBalance=c("458463","5412548","458463","5412548","458463","5412548","458463","5412548","458463","5412548","2484722"), 
       FarmType=c("Hay","Dairy","Fish","Hay","Dairy","Fish","Hay","Dairy","Fish","Hay","Dairy")) 


test[,1] <- sapply(test[,1],digest,algo="sha1") 

출력 예 :

        CustomerName LoanNumber LoanBalance FarmType 
1 5c96f777a14f201a6a9b79623d548f7ab61c7a11  12548  458463  Hay 
2 5c96f777a14f201a6a9b79623d548f7ab61c7a11  45878  5412548 Dairy 
3 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45796  458463  Fish 
4 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45813  5412548  Hay 
5 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45125  458463 Dairy 
6 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45216  5412548  Fish 
7 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45125  458463  Hay 
8 b0db86a39b9617cef61a8986fd57af7960eec9f4  45778  5412548 Dairy 
9 b0db86a39b9617cef61a8986fd57af7960eec9f4  45126  458463  Fish 
10 b0db86a39b9617cef61a8986fd57af7960eec9f4  32548  5412548  Hay 
11 b0db86a39b9617cef61a8986fd57af7960eec9f4  45683  2484722 Dairy 

수정 dataframe (요 제거 'H') :

test <- data.frame(CustomerName=c("Jon Snow","Jon Snow","Daffy Duck","Daffy Duck","Daffy Duck","Daffy Duck","Daffy Duck","Joe Farmer","Joe Farmer","Joe Farmer","Joe Farmer"), 
      LoanNumber=c("12548","45878","45796","45813","45125","45216","45125","45778","45126","32548","45683"), 
      LoanBalance=c("458463","5412548","458463","5412548","458463","5412548","458463","5412548","458463","5412548","2484722"), 
      FarmType=c("Hay","Dairy","Fish","Hay","Dairy","Fish","Hay","Dairy","Fish","Hay","Dairy")) 
test[,1] <- sapply(test[,1],digest,algo="sha1") 

새로운 출력 :

,451,515,
        CustomerName LoanNumber LoanBalance FarmType 
1 2cabeabb3b50e04d3b46ea2c68ab12c7350cd87f  12548  458463  Hay 
2 2cabeabb3b50e04d3b46ea2c68ab12c7350cd87f  45878  5412548 Dairy 
3 b0187b6ff2322fa86004d4d22cd479f3cdc345d2  45796  458463  Fish 
4 b0187b6ff2322fa86004d4d22cd479f3cdc345d2  45813  5412548  Hay 
5 b0187b6ff2322fa86004d4d22cd479f3cdc345d2  45125  458463 Dairy 
6 b0187b6ff2322fa86004d4d22cd479f3cdc345d2  45216  5412548  Fish 
7 b0187b6ff2322fa86004d4d22cd479f3cdc345d2  45125  458463  Hay 
8 2127453066c45db6ba7e2f6f8c14d22796c3fd54  45778  5412548 Dairy 
9 2127453066c45db6ba7e2f6f8c14d22796c3fd54  45126  458463  Fish 
10 2127453066c45db6ba7e2f6f8c14d22796c3fd54  32548  5412548  Hay 
11 2127453066c45db6ba7e2f6f8c14d22796c3fd54  45683  2484722 Dairy 

내가 기대 한 것이 무엇 : 이것이 어떻게 작동하는지 내가

CustomerName LoanNumber LoanBalance FarmType 
1 2cabeabb3b50e04d3b46ea2c68ab12c7350cd87f  12548  458463  Hay 
2 2cabeabb3b50e04d3b46ea2c68ab12c7350cd87f  45878  5412548 Dairy 
3 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45796  458463  Fish 
4 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45813  5412548  Hay 
5 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45125  458463 Dairy 
6 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45216  5412548  Fish 
7 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45125  458463  Hay 
8 b0db86a39b9617cef61a8986fd57af7960eec9f4  45778  5412548 Dairy 
9 b0db86a39b9617cef61a8986fd57af7960eec9f4  45126  458463  Fish 
10 b0db86a39b9617cef61a8986fd57af7960eec9f4  32548  5412548  Hay 
11 b0db86a39b9617cef61a8986fd57af7960eec9f4  45683  2484722 Dairy 

를 오해하고 있는가? 동일한 논리를 여러 열에 적용하면 변경되지 않은 열에 대해 동일한 값을 얻을 수 있지만 수정 된 값이있는 열에 대해서는 문제가 지속됩니다. 나는 내 사프리 기능이 동일한 결과로 문제가되지 않도록 다이제스트 기능을 Vectorize하려고 시도했다. 어떤 아이디어?

답변

0

나는 내 자신의 질문에 대답했다고 생각합니다. 물론 여기에 게시 한 직후입니다. :)

digest 함수에는 다음 설명서가있는 serialize 매개 변수가 있습니다. serialize (ASCII 형식)를 사용하여 개체를 serialize해야하는지 여부를 나타내는 논리 변수. 이것을 FALSE로 설정하면 주어진 문자열의 다이제스트 출력을 알려진 제어 출력과 비교할 수 있습니다. 또한 비 ASCII 직렬화 출력과 같은 원시 벡터를 사용할 수 있습니다.

serialize를 FALSE로 설정하면 문제가 해결 된 것으로 보이며 예상되는 결과를 얻습니다.

예 :

test[,1] <- sapply(test[,1],digest,algo="sha1",serialize = FALSE)