我正在学习使用cyphr,做一个非常简单的练习,但是遇到了一个涉及会话密钥的问题。我想加密一个文件,然后在以后的某个日期和时间解密,但是我遇到了下面的问题。我是唯一一个加密和解密文件的人,偶尔会修改文件。下面是发生的事情。
library(cyphr)
# SimpFile is a simple character file of length 107.
cykey123022 <- cyphr::key_sodium(sodium::keygen()) # generate a cyphr key
encrypt_file("SimpFile.txt", cykey123022, dest = "SimpFile.enc")
# That worked.
decrypt_file("SimpFile.enc", cykey123022, dest = "SimpFile.dec")
# That worked too.
另一个会话:重新加载R和工作空间。
library(cyphr)
decrypt_file("SimpFile.enc", cykey123022, dest = "SimpFile.dec")
Error: Failed to decrypt key as session key has changed
现在的问题是,虽然我了解会话密钥的用途,但我无法重置它,也无法执行我正在尝试执行的简单任务。顺便说一句,在这个特定的情况下,如果可以,我很乐意完全免除会话密钥。我很乐意简单地加密文件,隐藏加密密钥,然后在以后重新加载相同的密钥,以便解密文件。
我怎样才能做到最简单呢?
我已经描述了在上一帧中发生的事情。我希望能够解密文件,但没有成功。当我尝试这样做时,我得到了下面的错误消息:
错误:无法解密密钥,因为会话密钥已更改
1条答案
按热度按时间iqjalb3h1#
您的解密命令可能不应该有相同的输入和输出文件名-您每次都覆盖加密文件。我不认为这是问题的根源,但值得尝试
decrypt_file("SimpFile.enc", cykey123022, dest = "SimpFile_2.txt")
另外,检查:https://cran.r-project.org/web/packages/cyphr/vignettes/cyphr.html
"当使用key_openssl、keypair_openssl、key_sodium或keypair_sodium时,我们会生成一些可以解密数据的内容。这些函数返回的对象可以加密和解密数据,因此有理由担心,如果这些对象本身保存到磁盘,您的数据可能会受到损害。
为了避免这种情况,cyphr不将私钥或对称密钥直接存储在这些对象中,而是使用cyphr特定的会话密钥加密敏感密钥,该会话密钥在每次加载包时重新生成。这意味着这些对象实际上仅在一个会话中有用,如果使用save.image保存(可能在会话结束时自动保存),则这些密钥不能用于解密数据。