R 语言 |钠|密码 |如何保存和传输 KEY
R language | sodium | cyphr | How to save and transfer a KEY
我正在以本地用户身份加密 csv.
文件,并以远程用户身份解密同一文件,使用 R
语言并借助 sodium
和 cyphr
包。我遇到了满足要求的文档 (https://www.rdocumentation.org/packages/cyphr/versions/1.0.2/topics/key_sodium)。但是,我在保存密钥并将其传输给远程用户时遇到了障碍。
文档中的改编示例 (限制为 string
而不是 csv.
):
### Encryption at local user
# Create a new key
key <- cyphr::key_sodium(sodium::keygen())
key
# With this key encrypt a string
secret <- saveRDS(cyphr::encrypt_string("my secret string", key)
# Decryption at remote user:
cyphr::decrypt_string(secret, key)
如何将密钥共享给远程用户进行解密? 虽然我确实尝试将 key
保存到 .rds
或 file
格式并将其加载回 R,但密钥不再是 <cyphr_key: sodium>
对象 (使用 save
和 load
命令)。
以下是我尝试以远程用户身份解密时出现的错误:
Error: 'key' must be a cyphr_key
任何关于这方面的指导将不胜感激。
至于如何将密钥传输给远程用户,请参阅此Information Security Stack Exchange post。
错误是因为 saveRDS
不是 return 值。而且您还没有将任何内容保存到文件中,该代码行会出错。加密 和 保存到文件的正确方法是
key <- cyphr::key_sodium(sodium::keygen())
saveRDS(cyphr::encrypt_string("my secret string", key),
file = "test.rds")
secret <- readRDS("test.rds")
secret
# [1] 75 fc bb fd e3 07 66 3e 9b 72 ac ca c7 f5 3a ed 7c d7 e0 b0 ad 3e 53 ba
#[25] e7 dd 14 5e 64 0f 06 51 17 fe e1 f3 aa b9 27 7c 6e 8e 02 55 ae 68 0a 0f
#[49] 89 6c 17 b0 4f 83 3d ea
cyphr::decrypt_string(secret, key)
#[1] "my secret string"
至于将密钥保存到文件的问题,这是一个正常的saveRDS
调用,然后是readRDS
调用。
看看什么是key。
class(key)
#[1] "cyphr_key"
str(key)
#List of 4
# $ type : chr "sodium"
# $ key :function ()
# $ encrypt:function (msg)
# $ decrypt:function (msg)
# - attr(*, "class")= chr "cyphr_key"
现在将其保存到文件 "key.rds"
,从 .GlobalEnv
中删除对象 key
并从文件中读取它。
saveRDS(key, "key.rds")
rm(key)
key <- readRDS("key.rds")
成功了吗?
class(key)
#[1] "cyphr_key"
str(key)
#List of 4
# $ type : chr "sodium"
# $ key :function ()
# $ encrypt:function (msg)
# $ decrypt:function (msg)
# - attr(*, "class")= chr "cyphr_key"
显然是这样,请检查它是否正确解密了字符串。
cyphr::decrypt_string(secret, key)
#[1] "my secret string"
最后清理。
unlink("test.rds")
unlink("key.rds")
我正在以本地用户身份加密 csv.
文件,并以远程用户身份解密同一文件,使用 R
语言并借助 sodium
和 cyphr
包。我遇到了满足要求的文档 (https://www.rdocumentation.org/packages/cyphr/versions/1.0.2/topics/key_sodium)。但是,我在保存密钥并将其传输给远程用户时遇到了障碍。
文档中的改编示例 (限制为 string
而不是 csv.
):
### Encryption at local user
# Create a new key
key <- cyphr::key_sodium(sodium::keygen())
key
# With this key encrypt a string
secret <- saveRDS(cyphr::encrypt_string("my secret string", key)
# Decryption at remote user:
cyphr::decrypt_string(secret, key)
如何将密钥共享给远程用户进行解密? 虽然我确实尝试将 key
保存到 .rds
或 file
格式并将其加载回 R,但密钥不再是 <cyphr_key: sodium>
对象 (使用 save
和 load
命令)。
以下是我尝试以远程用户身份解密时出现的错误:
Error: 'key' must be a cyphr_key
任何关于这方面的指导将不胜感激。
至于如何将密钥传输给远程用户,请参阅此Information Security Stack Exchange post。
错误是因为 saveRDS
不是 return 值。而且您还没有将任何内容保存到文件中,该代码行会出错。加密 和 保存到文件的正确方法是
key <- cyphr::key_sodium(sodium::keygen())
saveRDS(cyphr::encrypt_string("my secret string", key),
file = "test.rds")
secret <- readRDS("test.rds")
secret
# [1] 75 fc bb fd e3 07 66 3e 9b 72 ac ca c7 f5 3a ed 7c d7 e0 b0 ad 3e 53 ba
#[25] e7 dd 14 5e 64 0f 06 51 17 fe e1 f3 aa b9 27 7c 6e 8e 02 55 ae 68 0a 0f
#[49] 89 6c 17 b0 4f 83 3d ea
cyphr::decrypt_string(secret, key)
#[1] "my secret string"
至于将密钥保存到文件的问题,这是一个正常的saveRDS
调用,然后是readRDS
调用。
看看什么是key。
class(key)
#[1] "cyphr_key"
str(key)
#List of 4
# $ type : chr "sodium"
# $ key :function ()
# $ encrypt:function (msg)
# $ decrypt:function (msg)
# - attr(*, "class")= chr "cyphr_key"
现在将其保存到文件 "key.rds"
,从 .GlobalEnv
中删除对象 key
并从文件中读取它。
saveRDS(key, "key.rds")
rm(key)
key <- readRDS("key.rds")
成功了吗?
class(key)
#[1] "cyphr_key"
str(key)
#List of 4
# $ type : chr "sodium"
# $ key :function ()
# $ encrypt:function (msg)
# $ decrypt:function (msg)
# - attr(*, "class")= chr "cyphr_key"
显然是这样,请检查它是否正确解密了字符串。
cyphr::decrypt_string(secret, key)
#[1] "my secret string"
最后清理。
unlink("test.rds")
unlink("key.rds")