- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 RSA 公钥的模数和指数嵌入到一个二进制文件中,我正在尝试提取整个 blob 并创建一个可用的 .pem 公钥。
目前,我正在提取完整的 260 个字节(4 个字节用于指数,256 个字节用于模数)并编码为base64。我正在使用以下 shell 命令执行此操作:
tail -c $((filesize - start_of_key_data)) filename | head -c $size_of_key_data | base64 > outkey
这给了我以下字符串:
<<<<<< modulus & exponent extracted from binary file, base64-encoded >>>>>>
tZyrQA6cZFJfVm6FyXwtZaLQYg8EecuO+ObrHTwc8JO+XrgnpNAdmlhbAEPxSNnjwhNnbYGYGL4F
vzmnZXzZU71Key42HQPh1k2Zx1UDbrH5ciODKx1ZbuEx8K24SHnL1nY/H75hwhT/ZRRVGQDvYDT+
sgzw2vmV66+dflw1Zs8BLhqjLjczdHvjeVXsDRJ9Mvvd/dhFH8UlTf4JpLGya9nsNIfNBBIf1Lll
RWwCTiEIbaOMgWcLjLV/2tk/j5Dra/oQnVf/2hVsEF/hXEx41YjeEW/warweoDVG7zaxrHEc/k/r
ZCUCZKxf8nBKdqax/gRICvkG6e5xg2GQw0W/ZwABAAE=
现在,当我使用最初提取模数和指数的 key.pem key 对,并像这样显示公共(public)部分时
openssl rsa -in key.pem -pubout -out pubkey.pem
我得到这个字符串(我省略了页眉和页脚行:
<<<<<<<<< valid public key data extracted from keypair >>>>>>>>>
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtZyrQA6cZFJfVm6FyXwt
ZaLQYg8EecuO+ObrHTwc8JO+XrgnpNAdmlhbAEPxSNnjwhNnbYGYGL4FvzmnZXzZ
U71Key42HQPh1k2Zx1UDbrH5ciODKx1ZbuEx8K24SHnL1nY/H75hwhT/ZRRVGQDv
YDT+sgzw2vmV66+dflw1Zs8BLhqjLjczdHvjeVXsDRJ9Mvvd/dhFH8UlTf4JpLGy
a9nsNIfNBBIf1LllRWwCTiEIbaOMgWcLjLV/2tk/j5Dra/oQnVf/2hVsEF/hXEx4
1YjeEW/warweoDVG7zaxrHEc/k/rZCUCZKxf8nBKdqax/gRICvkG6e5xg2GQw0W/
ZwIDAQAB
你可以看到我自己提取并进行base64编码的关键数据是实际上存在于使用 openssl 从 key.pem 中提取的有效公钥数据的数据中。但是开头有45个字符,我自己提取的数据没有-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
最后8个字符也不同。
ZwIDAQAB
有人可以就如何将模数和指数转换为可用的公钥提供一些建议吗?
(目标是在 bash 脚本中执行此操作,而不是像我看到的许多建议那样使用 python 或 C。)
最佳答案
您使用的命令 openssl rsa -in key.pem -pubout -out pubkey.pem
生成如下 ASN.1 结构:
SEQUENCE(2 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.1
NULL
BIT STRING(1 elem)
SEQUENCE(2 elem)
INTEGER(2048 bit) 229263895356027367204242482830890190076375310244080661230946245232688…
INTEGER 65537
(您可以使用 openssl asn1parse -in pubkey.pem
或使用 online ASN.1 decoder 查看结构)。
它的内容:
如果您正确收集了模数和指数字节,则可以通过连接这四个东西来构建 OpenSSL 可以理解的形式的公钥。您已经有了第一个较长的 header 。 “中间标题”是“02 03”:
如果您的模数是 2048 位(256 字节),指数是 3 字节(以便长度字段保持有效),则可以通过连接这四个来生成 PEM 文件:
<header> <modulus> 0x02 0x03 <exponent>
这就是二进制转储的最后一个字节与 OpenSSL 输出不同的原因:提取的 260 个字节不包含 02 03
,而是将 65537 记录为 00 01 00 01
(不是 ASN.1 编码中的 01 00 01
)。
总而言之,您可以像这样生成 PEM 文件:
将提取的模数+指数从 base64 转换回并提取它们(注意 257 字节偏移以跳过 65537 的前导零字节!):
echo 'tZyrQA6cZFJfVm6FyXwtZaLQYg8EecuO+ObrHTwc8JO+XrgnpNAdmlhbAEPxSNnjwhNnbYGYGL4FvzmnZXzZU71Key42HQPh1k2Zx1UDbrH5ciODKx1ZbuEx8K24SHnL1nY/H75hwhT/ZRRVGQDvYDT+sgzw2vmV66+dflw1Zs8BLhqjLjczdHvjeVXsDRJ9Mvvd/dhFH8UlTf4JpLGya9nsNIfNBBIf1LllRWwCTiEIbaOMgWcLjLV/2tk/j5Dra/oQnVf/2hVsEF/hXEx41YjeEW/warweoDVG7zaxrHEc/k/rZCUCZKxf8nBKdqax/gRICvkG6e5xg2GQw0W/ZwABAAE=' | base64 -d > modulus-exp.bin
dd if=modulus-exp.bin of=modulus.bin bs=1 count=256
dd if=modulus-exp.bin of=exponent.bin bs=1 skip=257 count=3
创建标题:
echo 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA' | base64 -d > header.bin
echo '02 03' | xxd -r -p > mid-header.bin
将它们连接在一起:
cat header.bin modulus.bin mid-header.bin exponent.bin > key.der
转换为 PEM:
openssl pkey -inform der -outform pem -pubin -in key.der -out key.pem
测试您是否获得了工作 key - 通过使用 ASN.1 解码器检查它,或通过
openssl asn1parse -in key.pem
openssl asn1parse -in key.pem -strparse 19
关于bash - 如何将原始模数和指数转换为 RSA 公钥(.pem 格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27568570/
如何根据 e(公钥)、d(私钥)和模数计算 p 和 q 参数? 我手边有 BigInteger 键,我可以将粘贴复制到代码中。一个公钥、一个私钥和一个模数。 我需要据此计算 RSA 参数 p 和 q。
如何在 JavaScript 中计算指数? 比如你会怎么做 12^2? 最佳答案 Math.pow() : js> Math.pow(12, 2) 144 关于JavaScript 指数,我们在Sta
也许是时候喝一杯咖啡了,但我看到了一个我没想到会看到的奇怪问题。 我正在阅读 JavaScript The Good Parts,在语法部分我看到以下内容: If a number literal h
我正在使用带有 eclipse link 2.3 &Derby db 的实体管理器 JPA,并且我有包含 10 个实体的模型,对于每个实体,我需要存储 1000 条记录,此过程大约需要 70 秒。我已
我习惯了制作 iPhone 应用程序,但现在我需要制作 Mac 应用程序。因此我必须切换到 Cocoa 框架。 有没有类似于 Cocoa 中的 array.index(of: ) 的东西? iOS 示
我正在尝试在控制台中打印文件名“xyz.0.html”。它吐出一个错误 "substring not found" 目录中的文件: xyz.0.html xyz.1.html xyz.2.html p
我需要计算 h-index来 self 存储在树中的出版物列表。 我所做的是按递减顺序遍历树,获取引用位置列表 看起来像: line 1 10 line 2 5 line 3 4 line 4 0 我
有没有一种更简单的方法将幂符号/指数符号转换为其等价数字(即从 ⁸ 到 8),而不仅仅是一堆 replace是吗? 编辑:谢谢大家的解决方案! 最佳答案 您可以创建一个正则表达式并执行一次 repla
我编写这段代码是为了查找指数 b 的最后一位数字,但 SPOJ 说它是错误的。我尝试了几乎所有的测试用例,但找不到错误。问题:http://www.spoj.com/problems/LASTDIG/
我对 CSS 中的 z-index 有疑问。 代码: div.banniere{ background-image:url('../img/banniere.png'); backgr
我有一个弹出的“对话框”小部件,其 z-index 为 100。当我创建另一个弹出窗口( float div)时,它出现在对话框小部件下方,因为我没有明确设置 z -新弹出窗口的索引。 结构最终看起来
我正在尝试从一篇学术论文中实现一个真相发现算法。它是一种流式算法,可以实时推断真相和源质量。如果有人有兴趣阅读本文,请在此处了解更多详细信息:http://dl.acm.org/citation.cf
这个问题在这里已经有了答案: Difference between Big-O and Little-O Notation (5 个答案) 关闭 8 年前。 直观上,nb = o(an)(o 是小哦
我在这里使用 sklearn 制作了一个决策树,在 SciKit learn DL 包下,即。 sklearn.tree.DecisionTreeClassifier().fit(x,y)。 如何在每
为了解释这一点,这基本上是一种将浮点向量数据缩小为 8 位或 16 位有符号或无符号整数的方法,该整数具有单个公共(public)无符号指数(最常见的是 bs16 以 11 为常用指数的精度)。 我不
是否可以在 Algolia 中“加入”索引?获得合并结果? 例如: 如果我有两个索引:一个用于“用户”,一个用于“事件”。每个用户都有 id 和 name 属性。每个事件都有 date 和 userI
有人可以提供一个关于如何在 pytorch 中为语义分割计算 IoU(交集对联合)的玩具示例吗? 最佳答案 我在某处找到了它并为我改编了它。如果我能再次找到它,我会发布链接。抱歉,如果这是重复的。 这
我正在将 NativeBase 与指数一起使用。标题位于手机的状态栏下方。您可以在 NativeBase 中看到这一点指数发布的演示。 有没有人解决这个问题? 最佳答案 由于此问题仅在 Android
基本上,有20只羊为一组。当羊群发展到80只羊后,就不再需要有人看管了。每年 t 的羊数量 N 可以通过以下公式找到: N = 220/(1 + 10(0.83)^t) 该程序试图找出羊需要被监管多少
我正在尝试编写一个 SPARQL 查询,我想在其中过滤某些内容的平方,但我根本无法弄清楚如何计算数字的平方(x2)(当然,除了将其与自身相乘之外)。我猜想有一个名为 math:sqrt() 的平方根函
我是一名优秀的程序员,十分优秀!