首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用R从磁盘读取加密文件

如何使用R从磁盘读取加密文件
EN

Stack Overflow用户
提问于 2014-08-14 22:50:02
回答 1查看 5.1K关注 0票数 13

我有一个敏感数据集,不应该未经加密存储在磁盘上。R能处理这个问题吗?还是全磁盘加密是我唯一的选择?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-15 05:19:12

我有一种感觉,有一个更容易的方法来做到这一点,但digest包,它的AES加密,是我遇到的最接近的东西,你要什么。这应该能让你开始。

代码语言:javascript
复制
# 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

这使用欧洲央行模式AES加密。显然,您需要使用相同的密钥来加密和解密。write.aes(...)将数据帧转换为csv格式的文本字符串,将其转换为raw (AES所需的),将原始向量转换为16个字节的倍数(AES也需要),加密并写入二进制文件。read.aes(...)基本上逆转了这个过程。

这只是一个例子,旨在修改以适应您的需要。例如,这样可以保存没有行名的数据帧,这可能是问题,也可能不是问题。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25318800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档