0

我们正在尝试使用直接在 MS SQL Server 中创建的 RSA 2048 公钥加密文件。这些公钥可以通过 sys.asymmetric_keys 视图查询。我们真的没有访问数据库的权限。公钥存储为 VARBINARY(max) 字段。看起来像这样:

0x0602000000240000525341310008000001000100D1D13925EC404DA171AE1EA9EFCFCB9849FA
4678DB26D0EEDD36D440D5EC3781A7EE3E05654EC6830B79E5E745F24A0C35B21C0089D19254A7
A12B65EA018116482190B2D4DDADB2CD7B0B79F0E08DF97C4E4569D181BC3C34D350AEF821CCA0
819E4AA336449A4B022F75FC6C382C4BA60CBBBA03461D2B6C7BF7CECE48D52A6B186C57226297
A09DD5D730ECA29C41796C1C961AA7763D8F7D0094F310D29AEA8D5F526B0B99FEC1841B5462A0
75648CADBB32C51A43EAC76E8D02B644996368890A762AEF80439B4CD92DA7D38417601918B104
B1DDEE846DF09E944B562A0828285A6EB362D19E2BDD79DBCE6B86D9F60D264C8EF4F4CCCAEB6B
89F410AF 

该公钥的长度为 554 位。它似乎是一个十六进制数。我不知道这个密钥是如何编码的。我知道我们需要一个 KeySpec 来实例化一个公钥。

PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic((KeySpec) new SomeKeySpec(bytes);

我不知道如何从中创建关键规范。

4

1 回答 1

0

嗯,010001是公共指数。这是一个众所周知的,费马的第四个数(一个素数,第一个和最后一个位设置为1,中间全为零)。这使它成为一个快速的公钥。

这使得:

00 D1D13925EC404DA171AE1EA9EFCFCB98
   49FA4678DB26D0EEDD36D440D5EC3781
   A7EE3E05654EC6830B79E5E745F24A0C
   35B21C0089D19254A7A12B65EA018116

   482190B2D4DDADB2CD7B0B79F0E08DF9
   7C4E4569D181BC3C34D350AEF821CCA0
   819E4AA336449A4B022F75FC6C382C4B
   A60CBBBA03461D2B6C7BF7CECE48D52A

   6B186C57226297A09DD5D730ECA29C41
   796C1C961AA7763D8F7D0094F310D29A
   EA8D5F526B0B99FEC1841B5462A07564
   8CADBB32C51A43EAC76E8D02B6449963

   68890A762AEF80439B4CD92DA7D38417
   601918B104B1DDEE846DF09E944B562A
   0828285A6EB362D19E2BDD79DBCE6B86
   D9F60D264C8EF4F4CCCAEB6B89F410AF

模数,编码为大端有符号整数。我不知道公共指数之前的标题。52534131是“RSA1”的ASCII,可能是某种标签,0800无疑是密钥大小。

于 2013-04-24T19:46:53.427 回答