如何在R中加密数据?

17

我正在为R日志记录包添加一个sentry处理程序。目前django-sentry基于在安全通道中以明文传输的共享密钥验证客户端(发送日志记录的应用程序)。

我想知道是否可能从R中进行加密,最好是基于非对称、公钥的加密方法,但我没有找到任何相关内容。

好吧,不是“是否可能”,而是“如何做到这一点”,以及是否已经有人这样做了。


与django-sentry作者互动后,我们选择了hmac,我已经在digest R包中实现了它(版本0.5+包含它)。这并没有回答“如何使用R加密数据”的问题,但解决了形成我最初问题基础的问题。

目前,我已经不再积极地研究R中的非对称加密,但如果您对此感兴趣,并且想要贡献想法或代码,请在这里留言!


1
似乎这还没有准备好。有人对完成此事感兴趣吗?我建议使用 GitHub 进行交流,并在 r-forge 上找到最好的主版本。在 r-forge 上,我已经注册了 gnupg 包,这是一个 GnuPG 的 R 封装器。只要我独自一人,我就会继续使用 r-forge。 - mariotomo
3个回答

7
你还可以在作者Simon Urbanek的PKI包中找到适合的函数。
该包提供了PKI函数,如证书验证、RSA加密和签名等,可用于构建PKI基础设施和执行加密任务。
来自教程的示例代码:
require(PKI)
key <- PKI.genRSAkey(2048)
x <- charToRaw("Hello, world!")
e <- PKI.encrypt(x, key)
y <- PKI.decrypt(e, key)
stopifnot(identical(x, y))
print(rawToChar(y))

输出的结果为:[1] "Hello, world!"

而加密后的信息e则为:

  [1] 36 83 d3 70 0a 67 b5 05 a6 40 1e 37 28 b9 4e 28 f1 31 92 14 2c 35 c8 8a 61 93 1e 04 62 01 da 3b 2b a0 75 1c 10 58 26
 [40] e4 77 da 7a 47 3f 4e 44 29 8e 97 6f 62 b1 98 44 ba 18 ef 57 1e 9e 9c 27 a8 6e 9c 7b c7 8b c0 c3 a3 00 e2 67 98 8b 6e
 [79] 1a 93 c6 d6 ed 4b 54 e5 7a 07 d7 06 ef a6 bb 36 6a 7f 57 06 b9 15 03 f6 51 3f 07 48 cb f4 2d 25 15 be 42 de f4 8a 06
[118] 72 89 b1 e3 04 d3 ec 80 99 f0 66 0f 84 e1 b5 af 23 24 a1 36 8e 62 65 ae 19 fb 77 d1 36 06 ae 71 95 ee 57 aa 68 5a 6b
[157] 4e 28 ba a2 0d 17 78 11 6c 7f 1b b3 ce 31 65 a9 d3 71 89 76 f9 19 a0 7a bf 02 dd c9 1f cb 9c 39 25 d4 48 a2 23 83 26
[196] b4 a9 b1 40 f5 1d 46 21 35 12 52 73 09 9b f3 52 e1 9e 0d 2a 9b ff 70 81 41 24 49 ed 58 b2 61 dc 3e c9 b3 b2 b1 37 e0
[235] 48 76 18 bf b0 e5 c2 d9 2b 92 2f 6b 49 dd e0 93 b7 10 f8 ba d2 8a

不是完整的解决方案。没有AES加密,原始RSA也不是推荐的选择。 - Deer Hunter

4

这个能帮到你吗:digest包?它包含了几种哈希函数。据我所知,非对称加密和哈希是一样的...


1
我之前不知道有 digest 包,我会去看看它的实现,也许有帮助。哈希可以作为签名的一部分,但绝对不同于非对称加密。没有使用公钥/私钥,也不能破解哈希,你懂的。 - mariotomo

3

这是一个旧的帖子,但如果其他人遇到类似问题,似乎 Hadley 开发了一个secure软件包。README 文件中写道:

secure 软件包在公共可用的代码存储库中提供了一个安全保险箱。它允许您将私有信息存储在公共存储库中,以便只有特定的人可以阅读它。这对测试非常有用,因为现在您可以在公共存储库中存储私有凭据,而不被世界上的人所阅读。

Secure 是建立在非对称(公钥/私钥)加密之上的。Secure 生成一个随机的主密钥,并用该密钥对 vault/ 目录下的每个文件进行加密 (使用 AES256)。主密钥没有以明文形式存储在任何地方;相反,对于每个用户,都会使用他们自己的公钥存储一个加密副本。每个用户都可以使用他们的私钥解密加密的主密钥,然后使用它来解密每个文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接