PEM文件格式具体解析

PEM文件格式存档

Author:Roson sun [email protected]

Time:2006-4-11

1.  描写叙述:

Openssl使用PEM(RFC 1421-1424)文档格式,假设使用其它语言包,则须要将此格式进行解码并将各个私公钥增加。

2.  说明:

a)         首先使用BASE64解码,假设是非ANSI TXT格式,须要做转换。

b)        一个RSA私钥包括一下信息(1024位):

>openssl rsa -in key.pem -noout -text

modulus:

00:d5:00:b2:18:c3:04:d1:ac:80:c6:22:a0:cc:5c:

f1:c0:4a:83:95:e5:c9:88:ae:31:64:ab:e1:15:42:

de:1a:da:bc:f5:d2:05:05:74:9d:d3:86:94:9b:9d:

74:bb:e5:72:a4:b8:40:27:61:88:d4:ac:20:b0:2b:

1c:1e:d7:9b:43:c5:06:b6:3a:b4:42:f0:5a:22:38:

23:74:99:4a:50:f1:f1:54:11:5a:44:0b:40:cf:83:

8a:73:6c:34:15:98:0a:7d:cf:0e:e5:00:8d:07:40:

f7:7d:fb:3f:64:35:1b:5d:a3:40:a9:51:fa:92:7d:

34:ef:03:fe:e0:59:56:31:25

数量:128

publicExponent:

01:00:01

数量:3

privateExponent:

11:e2:a8:11:ba:36:6a:60:c0:c3:62:5e:fc:2a:05:

c6:ae:bb:13:d8:22:af:0e:69:69:59:a1:61:c6:a6:

9d:bc:a6:47:41:e6:58:09:ed:c2:b8:37:3c:45:e1:

6a:71:9e:c9:c4:0a:e7:03:a2:98:b1:07:61:a3:8d:

0d:ed:ee:c4:7f:ca:fe:7d:c1:2e:2f:ca:3d:16:81:

4f:bf:ad:6a:03:ca:d7:80:dc:57:03:fe:cf:1f:37:

05:8d:58:79:14:01:1f:66:42:e4:f1:b6:9d:f1:01:

37:12:f4:d8:15:c0:cc:9b:fc:ea:55:cb:2f:ba:46:

fd:17:11:7e:43:b5:d1:15

数量:128

prime1:

00:ed:a0:e8:25:cc:1c:aa:f5:44:e2:78:9e:54:2c:

1d:60:cb:8f:32:b3:68:6d:b3:1d:cd:a9:8c:2a:ca:

02:bc:7b:a7:8b:06:1d:fa:af:4f:8c:26:81:54:12:

ec:7d:92:20:77:85:ef:6e:06:a6:8b:9c:eb:ab:6a:

e6:a1:83:6d:a3

数量:64(去掉开头的0)

prime2:

00:e5:78:66:5a:84:22:51:78:2d:14:fc:5f:f8:4e:

45:5f:e3:b2:5e:5b:50:a4:f5:55:e0:f3:0e:98:2c:

52:61:c2:50:df:f4:b7:bc:6e:69:3e:99:ff:1c:50:

a8:89:05:7a:2b:25:91:56:a5:a6:8f:8a:ec:80:82:

fa:eb:09:c2:97

数量:64(去掉开头的0)

exponent1:

00:89:e6:26:d2:48:71:1a:84:db:44:d1:da:8f:de:

49:ee:32:33:17:a9:25:a1:03:a0:f8:08:bc:5e:d8:

7c:5e:05:24:65:79:57:4c:73:10:26:b4:f1:b8:68:

82:f5:1c:27:db:34:ce:8d:7b:2e:8b:36:b5:4c:f4:

ec:82:2e:53:21

数量:64(去掉开头的0)

exponent2:

6a:16:a6:e3:74:31:55:8f:04:f0:ad:d9:44:b8:13:

14:c8:f5:5e:f0:42:b1:71:07:5a:2f:a4:f0:af:95:

0a:c3:46:96:b3:d1:fa:58:e5:69:5e:d2:f5:e9:48:

71:c8:c9:79:87:2d:d1:6c:56:3c:08:d3:5c:7a:b1:

bc:d6:4f:53

数量:64

coefficient:

62:dd:3f:f4:c7:30:c7:77:5e:8c:ae:c8:11:c1:23:

b0:6d:7d:07:54:8f:e7:12:1d:e1:00:ad:70:55:12:

43:f6:6f:a9:d7:94:9d:33:15:66:16:2d:d1:76:13:

33:0d:ae:6f:e3:3f:46:4b:4a:78:14:02:2e:72:66:

59:0c:2d:6a

数量:64

c)        与C#中RSAParameter结构体相应表:


说明


PEM


RSAParameter


Modulus


modulus


Exponent


Exponent


prime1


P


exponent1


Q


prime2


DP


exponent2


DQ


coefficient


InverseQ


privateExponent


D

d)        PEM偏移(1024位,以0为開始字符,十进制)


说明


PEM私钥


PEM公钥


长度


Modulus


11


29


128


PublicExponent


141


159


3


PrivateExponent


147


×


128


Prime1


278


×


64


Prime2


345


×


64


Exponent1


412


×


64


Exponent2


478


×


64


Coefficient


545


×


64

e)         样例程序(C#):

/// <summary>

/// 用得到的解码值来得到对应的Parameter(BASE64->RSAParameter)

/// </summary>

/// <param name="hashKey">源</param>

/// <param name="type">0私钥1公钥</param>

/// <returns></returns>

public RSAParameters getKeyPara(string hashKey,int type)

{

RSAParameters rsaP=new RSAParameters();

byte[] tmpKeyNoB64=Convert.FromBase64String(hashKey);

int pemModulus=128;

int pemPublicExponent=3;

int pemPrivateExponent=128;

int pemPrime1=64;

int pemPrime2=64;

int pemExponent1=64;

int pemExponent2=64;

int pemCoefficient=64;

byte[] arrPemModulus=new byte[128];

byte[] arrPemPublicExponent=new byte[3];

byte[] arrPemPrivateExponent=new byte[128];

byte[] arrPemPrime1=new byte[64];

byte[] arrPemPrime2=new byte[64];

byte[] arrPemExponent1=new byte[64];

byte[] arrPemExponent2=new byte[64];

byte[] arrPemCoefficient=new byte[64];

if(type==0)//私钥

{

//Modulus

for(int i=0;i<pemModulus;i++)

{

arrPemModulus[i]=tmpKeyNoB64[11+i];

}

rsaP.Modulus=arrPemModulus;

//PublicExponent

for(int i=0;i<pemPublicExponent;i++)

{

arrPemPublicExponent[i]=tmpKeyNoB64[141+i];

}

rsaP.Exponent=arrPemPublicExponent;

//PrivateExponent

for(int i=0;i<pemPrivateExponent;i++)

{

arrPemPrivateExponent[i]=tmpKeyNoB64[147+i];

}

rsaP.D=arrPemPrivateExponent;

//Prime1

for(int i=0;i<pemPrime1;i++)

{

arrPemPrime1[i]=tmpKeyNoB64[278+i];

}

rsaP.P=arrPemPrime1;

//Prime2

for(int i=0;i<pemPrime2;i++)

{

arrPemPrime2[i]=tmpKeyNoB64[345+i];

}

rsaP.Q=arrPemPrime2;

//Exponent1

for(int i=0;i<pemExponent1;i++)

{

arrPemExponent1[i]=tmpKeyNoB64[412+i];

}

rsaP.DP=arrPemExponent1;

//Exponent2

for(int i=0;i<pemExponent2;i++)

{

arrPemExponent2[i]=tmpKeyNoB64[478+i];

}

rsaP.DQ=arrPemExponent2;

//Coefficient

for(int i=0;i<pemCoefficient;i++)

{

arrPemCoefficient[i]=tmpKeyNoB64[545+i];

}

rsaP.InverseQ=arrPemCoefficient;

}

else//公钥

{

for(int i=0;i<pemModulus;i++)

{

arrPemModulus[i]=tmpKeyNoB64[29+i];

}

rsaP.Modulus=arrPemModulus;

for(int i=0;i<pemPublicExponent;i++)

{

arrPemPublicExponent[i]=tmpKeyNoB64[159+i];

}

rsaP.Exponent=arrPemPublicExponent;

}

return rsaP;

}

时间: 2024-08-29 11:20:37

PEM文件格式具体解析的相关文章

MP4文件格式的解析

MP4文件格式的解析,以及MP4文件的分割算法 mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime.以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的"媒体头".当然,流媒体点播也可以采用flv格式来做,flv也可以封装H.264视频数据的,不过Adobe却不推荐这么做,人家说毕竟mp4才是H.264最佳的存储格式嘛. 这几天整理并重构了一下mp4文件的解析程序,融合了分解与合并的程序,以前是c语言写的

用Java实现RSA加解密及签名和验签(1)——.pem文件格式秘钥

一.***.pem文件格式的秘钥(获取秘钥:可通过文件读取内容或者直接打开文件复制内容),我这里是打开文件复制秘钥直接使用 1.准备秘钥对,通过openssl生成秘钥对,生成秘钥可参考:https://www.cnblogs.com/ouyanxia/p/12427955.html A_RSA_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDnPzYKf20JIza

OPENSSL中RSA私钥文件(PEM格式)解析【一】

http://blog.sina.com.cn/s/blog_4fcd1ea30100yh4s.html 在PKCS#1 RSA算法标准中定义RSA私钥语法为: RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- p prime2 INTEGER, -- q

WAV文件格式分析解析,附带吗

WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的.RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”.    WAVE文件是由若干个Chunk组成的.按照在文件中的出现位置包括:RIFF WAVEChunk, Format Chunk, Fact Chunk(可选), Data Chunk.具体见下图: --------------------------------------------

WAV文件格式分析解析,代码已附

WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的.RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”.    WAVE文件是由若干个Chunk组成的.按照在文件中的出现位置包括:RIFF WAVEChunk, Format Chunk, Fact Chunk(可选), Data Chunk.具体见下图: --------------------------------------------

bmp文件格式详细解析

先区分几个概念:16色和16位色一样吗? 不一样! 颜色位数,即是用多少位字节表示的值,每一位可以表示0和1两值.通常图片的颜色深度,简称色深,就是用位数来表示的,所以,我通常会看到8位色,16位色,24位色和32位色.而我们在其它地方看到的又是16色,256色,16777216色等等,这些怎么一回事呢? 16色即代表16种颜色,256色即256种颜色,8位色就是用8个位来表示的颜色,即2的8次方,就是256色,16位色2的16次方,就是65536色,24位即16777216色,32位即4294

MP4文件格式的解析,以及MP4文件的分割算法

mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime.以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的"媒体头".当然,流媒体点播也可以采用flv格式来做,flv也可以封装H.264视频数据的,不过Adobe却不推荐这么做,人家说毕竟mp4才是H.264最佳的存储格式嘛. 这几天整理并重构了一下mp4文件的解析程序,融合了分解与合并的程序,以前是c语言写的,应用在linux上运行的服务器程序上,现在改成

wave文件格式与解析

常见的声音文件主要有两种,分别对应于单声道(11.025KHz 采样率.8Bit的采样值)和 双声道(44.1KHz采样率.16Bit的采样值). 对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH):而对于双声道立体声 声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道. 下面就是根据四个结构体写的代码,注意FACT不是必须的,可以不用写入头,不写的话就 是44个字节,写的话wave的头是56个字节. 1)一个wave file包

AI文件格式解析

一.AI文件结构说明 AI文件整体结构类似于PDF结构,主要由开头描述部分.间接对象.交叉索引表.文件尾部组成,主要结构如下图1所示,其中交叉索引表保存了所有obj在文件中的偏移地址,所有数据信息都保存在obj中,每个obj对象都类似于下面结构: 1 0 obj   数据   endobj ,交叉索引表以单行字符串Startxref开始. Comments Objm Objn …… xref Trailer(rootIndex) startxref %%EOF   图 1 注: 1.  Star