我有一个敏感的数据集,不应该明文存储在磁盘上。 R能够处理这个问题吗?还是全盘加密是我的唯一选择?
我感觉有一种更简单的方法来做这件事,但是digest
软件包可以进行AES加密,这是我找到的最接近你所要求的东西。这应该能帮助你入门。
# write encrypted data frame to file
write.aes <- function(df,filename, key) {
require(digest)
zz <- textConnection("out","w")
write.csv(df,zz, row.names=F)
close(zz)
out <- paste(out,collapse="\n")
raw <- charToRaw(out)
raw <- c(raw,as.raw(rep(0,16-length(raw)%%16)))
aes <- AES(key,mode="ECB")
aes$encrypt(raw)
writeBin(aes$encrypt(raw),filename)
}
# read encypted data frame from file
read.aes <- function(filename,key) {
require(digest)
dat <- readBin(filename,"raw",n=1000)
aes <- AES(key,mode="ECB")
raw <- aes$decrypt(dat, raw=TRUE)
txt <- rawToChar(raw[raw>0])
read.csv(text=txt)
}
# sample data
set.seed(1) # for reproducible example
data <- data.frame(x=rnorm(10),y=rpois(10,1),
z=letters[1:10],w=sample(T:F,10,replace=T))
set.seed(123581321)
key <- as.raw(sample(1:32,32))
write.aes(data,"encrypted.dat",key)
result <- read.aes("encrypted.dat",key)
# did it work?
all.equal(data,result)
# [1] TRUE
write.aes(...)
将数据帧转换为csv格式的文本字符串,将其转换为原始值(这是AES所需的),将原始向量填充到16个字节的倍数(这也是AES所需的),加密并写入二进制文件。 read.aes(...)
基本上是反向的过程。dput
和dget
而不是write.csv
和read.csv
来以文本格式存储任意R对象。 - cryo111
PKI
包。 - jlhowardsystem
函数,或者在 Windows 上使用的shell
函数可以用来向具有 API 的实用程序传递命令。 - IRTFM