使用 encryptr R-package 保存和解密加密文件

Posted

技术标签:

【中文标题】使用 encryptr R-package 保存和解密加密文件【英文标题】:Saving and decrypting encrypted files with encryptr R-package 【发布时间】:2022-01-13 17:20:48 【问题描述】:

我有一个闪亮的应用程序,我想将用户数据存储在服务器上,并希望在存储之前对其进行加密。我想为此使用encryptr 包,但到目前为止我无法使我的解决方案正常工作。到目前为止,我管理的是将数据写入 rds 文件,然后对其进行加密并删除未加密的副本。但是,理想情况下,我只想存储加密文件。但是,当我再次尝试解密时,文件根本没有改变。

#### Approach with storing file first (works)

# data
data <- mtcars

# saving file
saveRDS(data,"Example.rds")

# keys
genkeys()

# encrypting
encrypt_file("Example.rds")

# deleting unencrypted copy
file.remove("Example.rds")

# unencrypting file
data_decrypted <- decrypt_file("Example.rds.encryptr.bin")

我想做的是这样的

#### Approach with storing only encrypted file (can't be decrypted again)
    
# data
data <- mtcars
    
# keys
genkeys()

# encrypting data
data <- encrypt(colnames(data))

# saving encrypted data
saveRDS(data,"EncryptedData.rds")

# clearing wd
rm(data)

# loading encrypted data
EncryptedData <- readRDS("EncryptedData.rds.encryptr.bin")

# decrypting data
data_decrypted <- decrypt(colnames(EncryptedData))

【问题讨论】:

【参考方案1】:

您的encrypt/decrypt 调用中似乎缺少数据参数,并且您打开了错误的文件名。试试

data |> 
  encrypt(colnames(data)) |> 
  saveRDS("EncryptedData.rds")

rm(data)

EncryptedData <- readRDS("EncryptedData.rds")
data_decrypted  <- EncryptedData |> decrypt(colnames(EncryptedData))

请注意,我们将数据传递给加密。如果你只是运行encrypt(colnames(data)) 而不将数据传递到函数中,你应该会得到一个关于“没有适用的方法......类字符的对象”的错误。我使用了管道运算符|&gt;,但您也可以使用常规函数调用。然后,由于您正在写入“EncryptedData.rds”,请确保顶部打开该文件。 encrpyt() 函数会更改您的数据。它对保存的文件名没有任何影响。如果你不使用encrypt_file,文件名不会改变。

【讨论】:

谢谢!这行得通!你知道是否有办法从文件中存储和调用密码,这样我解密时就不必为每一列手动输入密码了吗?

以上是关于使用 encryptr R-package 保存和解密加密文件的主要内容,如果未能解决你的问题,请参考以下文章

R-package XML 安装失败及解决方式

javax.crypto.BadPaddingException: Given final block not properly padded

并行化 rfcv() 函数以在 randomForest 包中进行特征选择

如何使用rpart或party包过滤R中决策树中的自变量

R语言估计时变VAR模型时间序列的实证研究分析案例

如何分析 R 包中的底层 C 代码?