【问题标题】:Turn RSA public and private keys into strings in R将 RSA 公钥和私钥转换为 R 中的字符串
【发布时间】:2021-06-07 18:56:04
【问题描述】:

假设我在 R 中创建了一个私钥:

 key <- openssl::rsa_keygen()

这将创建一个具有两个类的对象:

class(key)

[1] "key" "rsa"

我可以看到我的公钥,但只能在终端中查看。如果我尝试从中获取字符串,我会失败:

key

[2048 位 rsa 私钥] md5: 7df8a65296e753a5a49a9037860ccb0f

as.character(key)

[1]“30”“82”“04”“a3”“02”“01”“00”“02”“82”“01”“01”“00”“d3” “2c” “3c” “1d” “1f” “de” “32” “72” “44” “a3” “7e” “74” “a4” “e2” ...

有没有办法从 RSA 公钥和私钥中提取字符串?如果是,是否可以从公钥和私钥字符串重新创建 key 对象?

@MrFlick 建议的更多细节,包括@akrun 解决方案。

假设以下字符串为pub.keyprivate.key

private.key <- digest::digest(as.character(key))
pub.key <- sub(".*:\\s+", "", capture.output(key)[2])
private.key

[1] "78761f4f60998970bb687aa2fde96aec"

pub.key

[1] "7df8a65296e753a5a49a9037860ccb0f"

我可以用这些字符串重新创建key 对象作为下面的伪代码吗?

key.recreated <- recreateKey(private.key, pub.key)
class(key.recreated)

[1] "key" "rsa"

key.recreated==key

是的

【问题讨论】:

  • 那么你到底需要一个字符串中的什么值呢?您是否尝试在此示例中获取“7df8a65296e753a5a49a9037860ccb0f”?您希望如何格式化密钥?
  • 我假设 pub.key 和 private key 本质上是两串字母和数字。如果这是真的,我希望将这两个值都视为字符串。 @akrun 已经完成了一半。如果私钥不是字符串,那么私钥字符串只是我的误解。
  • 这些值实际上是字节。有不同的方法可以将它们编码成字母和数字。目前尚不清楚您要使用哪种编码。你有一些你想匹配的例子吗? as.character 值是密钥中字节的十六进制值。
  • @MrFlick,现在我明白了。好吧,在那种情况下,我最初的询问中还有一个问题。是否可以从两个字符串(即 pub.key 和 private.key)(即 pub.key 和 private.key)(重新)创建类似于 key 的对象?
  • 再一次,这些字符串是什么样的?只要您知道如何正确解析字节,您就应该能够将其转换为密钥。如果没有某种可重复的例子,很难给出细节。

标签: r encryption openssl cryptography


【解决方案1】:

我们可以使用capture.output,提取第二个元素,删除子字符串直到空格返回键

sub(".*:\\s+", "", capture.output(key)[2])

另外,用于访问pubkey

key$pubkey$ssh

【讨论】:

    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2015-10-19
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多