- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在做一个关于 RSA 算法的纯数学演示,所以我用命令做了一对 key :
ssh-keygen -t rsa -C "my_mail@server.com"
所以它制作了文件 id_rsa 和 id_rsa.pub,因为这些文件只是为了演示海豚我没有问题展示它们,这些是
id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA3WqSN/xKwYb3NcgkLV0FO+KSKTcAQR/LChN6gXfHi8n+DXy9
4Ms4RnXohW2pSFinTs+k0I6VEgiwUYGqO5Ak6S5k6L4DuOG2frQtLkIvapV+LG4W
8jkWXRgsyrtne3iUTjbUa9/iDPN6hsGuCDANLjodu8dxzOXNApX7EyIv+9NpabcF
kt8AUwN8z8mCz52j4fhzOD/0DlfHWj1trqtNkq9dzKyY+4FOpgxTUSmKBxzuYT6m
f8T3E8S9eHPA9GB9ZidauqdOYhP8YYJp9cTHaxZFpmzjBfY0wAajOjN7oLWuoXRD
Ave8pI6WMABLlC4duVym6hFW+SIjlb0SlitF5QIDAQABAoIBAQDWK1+EB+XHjGVT
AGT9/Bwz8NSwSSNV2wrqlCzLTrEV5ix3n1GLPwcQILzpU0mLUTWEZhVmJoTLDNx/
+oxPUP5jDx1Mg3/WNX3w0Rdix2JWFoQVNee8JLwdEGVDNELEi73oaeDO96AQJvM9
pdpQ0SnurQhVunW5XA8RkUFrIIaJbgjCrCajNdh0uilGXj8MZInQoApCsVd0Eax4
/X1iaCndkAnYGsy7s3YQMrZ3iPigbLG4nuYgS8NYDLQpEX9vq9bqbER5wUjfldyp
0nN3mSltvFItkzW6LfYsgRD86KVUwqMq/EjN6xNX1M4pSfRh9BQKcgwLWQwBDkyw
fcOn4zwBAoGBAPIaiMVf2oIV0bEUCdkY+rFGoNHWgkeMBfbxeqfZ7K9sXp7eLUic
Knciqzh/GQ9PM6H6g8PhedLXonFtzShNG+dFW+UX3fFTdfJDgX0MUih+6qDp5QkI
0Ej1K5y7g9pOEVOxbgyHtN0s38Li6oZHGRnbf7tDrnMpZP0LGdZceiNpAoGBAOog
Dq5/Z8HpYTr/C8GT3BsZTKqs1wawKJaZ9NKf/0+vc1lTZ8ZlSG0Dy9HlECfYdIhX
af5n0QG3OR77gh6oYqt9cCokggTrmgxxz7NdcXQezfQr5zVMeqDc2oTCKymrIXru
WLWZrb0134UgRl6lcIx3XGCci1+BlEJUlAjFGcsdAoGALUhtQI2XLzGpkPdwiBy1
9yaAuf7nSz6TdwbfrDmEnaMlZ42i5qve/X2MjPqo00Y7IBbdQmwP/zG5/oFNGDaj
+3PrpkP6jULREskxlRQS4eQrOoHFBxWQ77R7vcsM9G4Zq4/KR6myWJQmHiuXNhpi
RYXatEoKfRvG+dVztbaCWdECgYAYd6sxH013nW003iybWVl6V4WEnLWIFGbZflNw
o5np+PsEDcxdln4gLnJhiB/NGjjrer8wACd+l2hXzY8GpzBQnbZYISKZYwnhXQ+I
vi46JXH+n4v1LP3vy8TmdOhP3XuNPlV0/Q+EI5otbncMMxv1AhBcZF/IZmFZIT+r
PvX4HQKBgQC2AY43HY/TQABe0SpygRwVfyTNgLsVCZNu+BKZ9V3wc4Wviq8CeXSo
eD6M3j8adkVIsz/QRwiau3RavoMfH3I6K04F+a3TtfuCvlbuj4WOJGU1s29iD8DZ
enu/vDfWeNFZIVvhx2e70ahdpy0ZbV7rYogMesAa+0VOQ0ZfK1a0Jw==
-----END RSA PRIVATE KEY-----
id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDdapI3/ErBhvc1yCQtXQU74pIpNwBBH8sKE3qBd8eLyf4NfL3gyzhGdeiFbalIWKdOz6TQjpUSCLBRgao7kCTpLmTovgO44bZ+tC0uQi9qlX4sbhbyORZdGCzKu2d7eJRONtRr3+IM83qGwa4IMA0uOh27x3HM5c0ClfsTIi/702lptwWS3wBTA3zPyYLPnaPh+HM4P/QOV8daPW2uq02Sr13MrJj7gU6mDFNRKYoHHO5hPqZ/xPcTxL14c8D0YH1mJ1q6p05iE/xhgmn1xMdrFkWmbOMF9jTABqM6M3ugta6hdEMC97ykjpYwAEuULh25XKbqEVb5IiOVvRKWK0Xl my_mail@server.com
但是当我查看https://en.wikipedia.org/wiki/RSA_(cryptosystem)中的信息时我发现算法是: c = m^e 模 n m = c^d mod n
在哪里
e is public key
d is private key
n is the common module
我的问题是文件中哪部分是 e,哪部分是 d,哪部分是 n?
或
有没有办法从文件中读取它并将其直接插入到 gmp c++ 库的 mpz_class 中?
这些对我来说已经足够了
最佳答案
ssh-keygen
的-m
命令行选项在手册页中记录如下:
-m
key_format:Specify a key format for the-i
(import) or-e
(export) conversion options. The supported key formats are: “RFC4716” (RFC 4716/SSH2 public or private key), “PKCS8” (PEM PKCS8 public key) or “PEM” (PEM public key). The default conversion format is “RFC4716”.
作为 Artjom B. 的评论说数据是某种形式的 ASN.1,让我们导出到 PEM 并将结果提供给 openssl asn1parse
:
$ ssh-keygen -m PEM -e -f id_rsa.pub | openssl asn1parse -i
0:d=0 hl=4 l= 266 cons: SEQUENCE
4:d=1 hl=4 l= 257 prim: INTEGER :DD6A9237FC4AC186F735C8242D5D053BE292293700411FCB0A137A8177C78BC9FE0D7CBDE0CB384675E8856DA94858A74ECFA4D08E951208B05181AA3B9024E92E64E8BE03B8E1B67EB42D2E422F6A957E2C6E16F239165D182CCABB677B78944E36D46BDFE20CF37A86C1AE08300D2E3A1DBBC771CCE5CD0295FB13222FFBD36969B70592DF0053037CCFC982CF9DA3E1F873383FF40E57C75A3D6DAEAB4D92AF5DCCAC98FB814EA60C5351298A071CEE613EA67FC4F713C4BD7873C0F4607D66275ABAA74E6213FC618269F5C4C76B1645A66CE305F634C006A33A337BA0B5AEA1744302F7BCA48E9630004B942E1DB95CA6EA1156F9222395BD12962B45E5
265:d=1 hl=2 l= 3 prim: INTEGER :010001
这是公共(public)模数 n
后跟公钥 e
,两者均以十六进制表示法给出。查看私钥:
$ openssl asn1parse -i < id_rsa
0:d=0 hl=4 l=1188 cons: SEQUENCE
4:d=1 hl=2 l= 1 prim: INTEGER :00
7:d=1 hl=4 l= 257 prim: INTEGER :DD6A9237FC4AC186F735C8242D5D053BE292293700411FCB0A137A8177C78BC9FE0D7CBDE0CB384675E8856DA94858A74ECFA4D08E951208B05181AA3B9024E92E64E8BE03B8E1B67EB42D2E422F6A957E2C6E16F239165D182CCABB677B78944E36D46BDFE20CF37A86C1AE08300D2E3A1DBBC771CCE5CD0295FB13222FFBD36969B70592DF0053037CCFC982CF9DA3E1F873383FF40E57C75A3D6DAEAB4D92AF5DCCAC98FB814EA60C5351298A071CEE613EA67FC4F713C4BD7873C0F4607D66275ABAA74E6213FC618269F5C4C76B1645A66CE305F634C006A33A337BA0B5AEA1744302F7BCA48E9630004B942E1DB95CA6EA1156F9222395BD12962B45E5
268:d=1 hl=2 l= 3 prim: INTEGER :010001
273:d=1 hl=4 l= 257 prim: INTEGER :D62B5F8407E5C78C65530064FDFC1C33F0D4B0492355DB0AEA942CCB4EB115E62C779F518B3F071020BCE953498B5135846615662684CB0CDC7FFA8C4F50FE630F1D4C837FD6357DF0D11762C7625616841535E7BC24BC1D1065433442C48BBDE869E0CEF7A01026F33DA5DA50D129EEAD0855BA75B95C0F1191416B2086896E08C2AC26A335D874BA29465E3F0C6489D0A00A42B1577411AC78FD7D626829DD9009D81ACCBBB3761032B67788F8A06CB1B89EE6204BC3580CB429117F6FABD6EA6C4479C148DF95DCA9D2737799296DBC522D9335BA2DF62C8110FCE8A554C2A32AFC48CDEB1357D4CE2949F461F4140A720C0B590C010E4CB07DC3A7E33C01
534:d=1 hl=3 l= 129 prim: INTEGER :F21A88C55FDA8215D1B11409D918FAB146A0D1D682478C05F6F17AA7D9ECAF6C5E9EDE2D489C2A7722AB387F190F4F33A1FA83C3E179D2D7A2716DCD284D1BE7455BE517DDF15375F243817D0C52287EEAA0E9E50908D048F52B9CBB83DA4E1153B16E0C87B4DD2CDFC2E2EA86471919DB7FBB43AE732964FD0B19D65C7A2369
666:d=1 hl=3 l= 129 prim: INTEGER :EA200EAE7F67C1E9613AFF0BC193DC1B194CAAACD706B0289699F4D29FFF4FAF73595367C665486D03CBD1E51027D874885769FE67D101B7391EFB821EA862AB7D702A248204EB9A0C71CFB35D71741ECDF42BE7354C7AA0DCDA84C22B29AB217AEE58B599ADBD35DF8520465EA5708C775C609C8B5F819442549408C519CB1D
798:d=1 hl=3 l= 128 prim: INTEGER :2D486D408D972F31A990F770881CB5F72680B9FEE74B3E937706DFAC39849DA325678DA2E6ABDEFD7D8C8CFAA8D3463B2016DD426C0FFF31B9FE814D1836A3FB73EBA643FA8D42D112C931951412E1E42B3A81C5071590EFB47BBDCB0CF46E19AB8FCA47A9B25894261E2B97361A624585DAB44A0A7D1BC6F9D573B5B68259D1
929:d=1 hl=3 l= 128 prim: INTEGER :1877AB311F4D779D6D34DE2C9B59597A5785849CB5881466D97E5370A399E9F8FB040DCC5D967E202E7261881FCD1A38EB7ABF3000277E976857CD8F06A730509DB6582122996309E15D0F88BE2E3A2571FE9F8BF52CFDEFCBC4E674E84FDD7B8D3E5574FD0F84239A2D6E770C331BF502105C645FC8666159213FAB3EF5F81D
1060:d=1 hl=3 l= 129 prim: INTEGER :B6018E371D8FD340005ED12A72811C157F24CD80BB1509936EF81299F55DF07385AF8AAF027974A8783E8CDE3F1A764548B33FD047089ABB745ABE831F1F723A2B4E05F9ADD3B5FB82BE56EE8F858E246535B36F620FC0D97A7BBFBC37D678D159215BE1C767BBD1A85DA72D196D5EEB62880C7AC01AFB454E43465F2B56B427
将其与 the document Artjom referenced 进行比较, 你可以猜到这9个整数序列大概对应于version
, modulus
, publicExponent
, privateExponent
, prime1
, prime2
, exponent1
, exponent2
, coefficient
.您可以识别 modulus
和 publicExponent
的值,因为它们与您在公钥中的值相匹配。因此,为了读取私钥,我们知道解析类 PEM 文件就足够了。您可能可以链接到 libopenssl 并使用它的 API 为您做这件事。
但是 id_rsa.pub
的格式是什么?如果你在没有 -m
标志的情况下运行命令,你会得到类似的东西
$ ssh-keygen -e -f id_rsa.pub
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA, converted by … from OpenSSH"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDdapI3/ErBhvc1yCQtXQU74pIpNwBBH8sKE3qBd8
eLyf4NfL3gyzhGdeiFbalIWKdOz6TQjpUSCLBRgao7kCTpLmTovgO44bZ+tC0uQi9qlX4s
bhbyORZdGCzKu2d7eJRONtRr3+IM83qGwa4IMA0uOh27x3HM5c0ClfsTIi/702lptwWS3w
BTA3zPyYLPnaPh+HM4P/QOV8daPW2uq02Sr13MrJj7gU6mDFNRKYoHHO5hPqZ/xPcTxL14
c8D0YH1mJ1q6p05iE/xhgmn1xMdrFkWmbOMF9jTABqM6M3ugta6hdEMC97ykjpYwAEuULh
25XKbqEVb5IiOVvRKWK0Xl
---- END SSH2 PUBLIC KEY ----
该输出主要部分的 base64 数字与 id_rsa.pub
行中的数字完全相同,因此它一定是这种“RFC4716”格式的轻微变体。读书RFC 4716 section 3.4 :
3.4. Public Key File Body
The body of a public key file is the base64 encoded ([RFC2045])public key data as specified by [RFC4253], Section 6.6:
string certificate or public key format identifier
byte[n] key/certificate dataAs with all other lines, each line in the body MUST NOT be longerthan 72 8-bit bytes excluding line termination characters.
还有那个RFC4253 Section 6.6写道:
The "ssh-rsa" key format has the following specific encoding:
string "ssh-rsa"
mpint e
mpint n
此处使用的类型string
和mpint
在RFC4251 Section 5 中有解释。 .本质上,每个都是一个 32 位数字,以字节为单位给出长度,后跟实际数据。如果仔细观察,您可以识别出与其他表示中相同的整数。
$ cut -d' ' -f2 < id_rsa.pub | base64 -d | hexdump -C
00000000 [00 00 00 07:73 73 68 2d 72 73 61|00 00 00 03:01 |....ssh-rsa.....|
00000010 00 01|00 00 01 01:00 dd 6a 92 37 fc 4a c1 86 f7 |........j.7.J...|
00000020 35 c8 24 2d 5d 05 3b e2 92 29 37 00 41 1f cb 0a |5.$-].;..)7.A...|
00000030 13 7a 81 77 c7 8b c9 fe 0d 7c bd e0 cb 38 46 75 |.z.w.....|...8Fu|
00000040 e8 85 6d a9 48 58 a7 4e cf a4 d0 8e 95 12 08 b0 |..m.HX.N........|
00000050 51 81 aa 3b 90 24 e9 2e 64 e8 be 03 b8 e1 b6 7e |Q..;.$..d......~|
00000060 b4 2d 2e 42 2f 6a 95 7e 2c 6e 16 f2 39 16 5d 18 |.-.B/j.~,n..9.].|
00000070 2c ca bb 67 7b 78 94 4e 36 d4 6b df e2 0c f3 7a |,..g{x.N6.k....z|
00000080 86 c1 ae 08 30 0d 2e 3a 1d bb c7 71 cc e5 cd 02 |....0..:...q....|
00000090 95 fb 13 22 2f fb d3 69 69 b7 05 92 df 00 53 03 |..."/..ii.....S.|
000000a0 7c cf c9 82 cf 9d a3 e1 f8 73 38 3f f4 0e 57 c7 ||........s8?..W.|
000000b0 5a 3d 6d ae ab 4d 92 af 5d cc ac 98 fb 81 4e a6 |Z=m..M..].....N.|
000000c0 0c 53 51 29 8a 07 1c ee 61 3e a6 7f c4 f7 13 c4 |.SQ)....a>......|
000000d0 bd 78 73 c0 f4 60 7d 66 27 5a ba a7 4e 62 13 fc |.xs..`}f'Z..Nb..|
000000e0 61 82 69 f5 c4 c7 6b 16 45 a6 6c e3 05 f6 34 c0 |a.i...k.E.l...4.|
000000f0 06 a3 3a 33 7b a0 b5 ae a1 74 43 02 f7 bc a4 8e |..:3{....tC.....|
00000100 96 30 00 4b 94 2e 1d b9 5c a6 ea 11 56 f9 22 23 |.0.K....\...V."#|
00000110 95 bd 12 96 2b 45 e5] |....+E.|
00000117
我对输出进行了编辑,使数据边界更加明显。查看十六进制输出,您会看到这三个部分:
[7: "ssh-rsa" | 3: e=0x010001 | 0x101=257: n=0x00dd6a…3b45e5]
关于ssl - rsa key 文件的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35663650/
今天我在一个 Java 应用程序中看到了几种不同的加载文件的方法。 文件:/ 文件:// 文件:/// 这三个 URL 开头有什么区别?使用它们的首选方式是什么? 非常感谢 斯特凡 最佳答案 file
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我有一个 javascript 文件,并且在该方法中有一个“测试”方法,我喜欢调用 C# 函数。 c# 函数与 javascript 文件不在同一文件中。 它位于 .cs 文件中。那么我该如何管理 j
需要检查我使用的文件/目录的权限 //filePath = path of file/directory access denied by user ( in windows ) File fil
我在一个目录中有很多 java 文件,我想在我的 Intellij 项目中使用它。但是我不想每次开始一个新项目时都将 java 文件复制到我的项目中。 我知道我可以在 Visual Studio 和
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我有 3 个组件的 Twig 文件: 文件 1: {# content-here #} 文件 2: {{ title-here }} {# content-here #}
我得到了 mod_ldap.c 和 mod_authnz_ldap.c 文件。我需要使用 Linux 命令的 mod_ldap.so 和 mod_authnz_ldap.so 文件。 最佳答案 从 c
我想使用PIE在我的项目中使用 IE7。 但是我不明白的是,我只能在网络服务器上使用 .htc 文件吗? 我可以在没有网络服务器的情况下通过浏览器加载的本地页面中使用它吗? 我在 PIE 的文档中看到
我在 CI 管道中考虑这一点,我应该首先构建和测试我的应用程序,结果应该是一个 docker 镜像。 我想知道使用构建环境在构建服务器上构建然后运行测试是否更常见。也许为此使用构建脚本。最后只需将 j
using namespace std; struct WebSites { string siteName; int rank; string getSiteName() {
我是 Linux 新手,目前正在尝试使用 ginkgo USB-CAN 接口(interface) 的 API 编程功能。为了使用 C++ 对 API 进行编程,他们提供了库文件,其中包含三个带有 .
我刚学C语言,在实现一个程序时遇到了问题将 test.txt 文件作为程序的输入。 test.txt 文件的内容是: 1 30 30 40 50 60 2 40 30 50 60 60 3 30 20
如何连接两个tcpdump文件,使一个流量在文件中出现一个接一个?具体来说,我想“乘以”一个 tcpdump 文件,这样所有的 session 将一个接一个地按顺序重复几次。 最佳答案 mergeca
我有一个名为 input.MP4 的文件,它已损坏。它来自闭路电视摄像机。我什么都试过了,ffmpeg , VLC 转换,没有运气。但是,我使用了 mediainfo和 exiftool并提取以下信息
我想做什么? 我想提取 ISO 文件并编辑其中的文件,然后将其重新打包回 ISO 文件。 (正如你已经读过的) 我为什么要这样做? 我想开始修改 PSP ISO,为此我必须使用游戏资源、 Assets
给定一个 gzip 文件 Z,如果我将其解压缩为 Z',有什么办法可以重新压缩它以恢复完全相同的 gzip 文件 Z?在粗略阅读了 DEFLATE 格式后,我猜不会,因为任何给定的文件都可能在 DEF
我必须从数据库向我的邮件 ID 发送一封带有附件的邮件。 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Adventure Works Admin
我有一个大的 M4B 文件和一个 CUE 文件。我想将其拆分为多个 M4B 文件,或将其拆分为多个 MP3 文件(以前首选)。 我想在命令行中执行此操作(OS X,但如果需要可以使用 Linux),而
快速提问。我有一个没有实现文件的类的项目。 然后在 AppDelegate 我有: #import "AppDelegate.h" #import "SomeClass.h" @interface A
我是一名优秀的程序员,十分优秀!