2016-10-13 5 views
0

Я пытаюсь создать блестящее приложение, которое позволяет пользователю выбирать столбцы для шифрования, где значения в каждой строке всегда должны быть одинаковыми для последующих прогонов, если данные та же. То есть Если имя клиента = «Джон», вы всегда получаете «А» при запуске этого процесса, если имя клиента меняется на «Джон», вы можете получить «С» ... но если изменить его на «Джон», вы снова получите А. Это будет использоваться для секретных данных «Маска» для анализа.Digest-Получение разных значений во всех строках при изменении только одного

Кроме того, если кто-либо может предложить метод «расшифровать» эти столбцы, сохранив ключ, который будет использоваться позже ... это будет оценено.

Упрощенный вариант, как я попытке выполнить эту библиотеку (переваривать обязательно):

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 (удален 'ч' в Ин):

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") 

Новый выход:

        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 

ли я недоразумение, как это работает? Если я применяю ту же логику к нескольким столбцам, я получаю одинаковые значения для неизмененного столбца, но проблема сохраняется для столбца с измененными значениями. Я попытался вставить векторную функцию дайджеста только для того, чтобы моя функция sapply не была проблемой с теми же результатами. Есть идеи?

ответ

0

Я думаю, что я ответил на свой вопрос ... конечно, сразу после того, как я разместил его здесь :).

Функция дайджеста имеет параметр сериализации со следующей документацией: логическая переменная, указывающая, должен ли объект сериализоваться с использованием сериализации (в форме ASCII). Установка этого параметра в FALSE позволяет сравнить результат дайджеста заданных символов с известным управляющим выходом. Он также позволяет использовать исходные векторы, такие как вывод сериализации без ASCII.

Настройка сериализации в FALSE, похоже, устраняет проблему, и я получаю ожидаемый результат.

например:

test[,1] <- sapply(test[,1],digest,algo="sha1",serialize = FALSE) 
Смежные вопросы