我正试图加密一个具有相同ID的多行数据库。使用"encryptr"对于相同的ID,我得到不同的结果。我怎样才能改变这一点?
示例代码:
ID <- c('1','1','1')
salary <- c(21000, 23400, 26800)
data <- data.frame(ID, salary)
data =
data %>%
encryptr::encrypt(ID)
data
我如何强制它将相同的ID编码为相同的编码字符串?
谢谢!
你不能。从他们的网页https://encrypt-r.org:
不是散列
为给定输入产生的密文将随每次输入而改变加密。这是RSA算法的一个特点。暗文应该因此,不会尝试在加密的数据集之间进行匹配使用相同的公钥。这是一个有意识的决定与共享必要细节相关的风险(一个盐)。
编辑添加:
如果你真的想要一个散列,digest
包可以计算几个。它被设计为一次对整个向量进行哈希,但你可以使用Vectorize
对每个元素进行哈希,例如
library(digest)
vdigest <- Vectorize(digest)
data <-
data %>% mutate(hash = vdigest(ID)) %>% encryptr::encrypt(ID)
反转vdigest并不容易,所以您可能需要哈希值和加密ID。
请注意,encryptr
的作者知道他们在做什么:包括哈希会使加密更不安全。