【发布时间】: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.key 和private.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