それは常にF3の指数値を用いて、1024ビットのキー(0x010001)140バイトであるべきです。
公開鍵の符号化がpb
とpc
は、オプションのパディング・バイト(負であるから整数を防止するため)、およびXA-XC(およびY/ZA-C)値である
SEQUENCE (RSAPublicKey)
30 xa [ya [za ...]]
INTEGER (n)
02 xb [yb [zb ...]] [pb] ...
INTEGER (e)
02 xc [yc [zc ...]] [pc] ...
ありますBERの長さです。
eが0x010001の場合は、02 03 01 00 01
、常に5バイトとしてエンコードされます。
RSAキーのキーサイズは、最初のセットビットから始まるビットストリングの長さによって決まります。だから、1024ビットのキーの値は2^1023^1024年2の間になり、高ビットがセットされているので、それは
0b1xxx_xxxx {1016 other "don't care" bits}
のように見えるだろうということは、数はパディングなしでマイナスとなり、そう1024ビットの数値は128値バイトに符号化され、先頭の1バイトは「符号ビットが設定されていません」つまり129バイトになります。
これで整数の完全な符号化された長さを知ることができました129. 0x81は0x79(最大の「コンパクト」BER長)よりも大きいので、長さは0x81(長さは次の1バイトで表される)0x81。
02 81 81 00 [128 more bytes representing n]
Soはe
は5バイトに符号化され、そしてn
はにコード132(128 + 1 + 2 + 1)ヘクスで137
137は、シーケンスの長さが0x81と0x89であること作り、0x89であり、 。 137バイトのコンテンツ+ 2バイトの長さ+ 1バイトのタグ=> 140バイト。
30 81 89
02 81 81 00 [128 more bytes of n]
02 03 01 00 01
この計算では、誰もキーサイズの定義に悪影響を与えていないことを前提としています。緩やかな解釈(http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Br1.pdfが間違っている)は、n
の値を2^1016と2^1024の間に置くことになります(別名「128バイトが必要」ということです)。その場合、パディングバイトはn
から消失し、長さは139になります。
はい、サイズは異なる場合があります。 '-RSAPublicKey_out'が私のバージョンのopensslに対して有効なオプションではないので、あなたのパイプの第2のコマンドが何であるか分かりません。 –