asn算法
为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
1.对称加密算法
OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。
2.非对称加密算法
OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
3.信息摘要算法
OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。
4.密钥和证书管理
密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。
首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。
在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。
事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。
5.SSL和TLS协议
OpenSSL实现了SSL协议的SSLv2和SSLv3,支持了其中绝大部分算法协议。OpenSSL也实现了TLSv1.0,TLS是SSLv3的标准化版,虽然区别不大,但毕竟有很多细节不尽相同。
虽然已经有众多的软件实现了OpenSSL的功能,但是OpenSSL里面实现的SSL协议能够让我们对SSL协议有一个更加清楚的认识,因为至少存在两点:一是OpenSSL实现的SSL协议是开放源代码的,我们可以追究SSL协议实现的每一个细节;二是OpenSSL实现的SSL协议是纯粹的SSL协议,没有跟其它协议(如HTTP)协议结合在一起,澄清了SSL协议的本来面目。
6.应用程序
OpenSSL的应用程序已经成为了OpenSSL重要的一个组成部分,其重要性恐怕是OpenSSL的开发者开始没有想到的。现在OpenSSL的应用中,很多都是基于OpenSSL的应用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的应用程序实现的。OpenSSL的应用程序是基于OpenSSL的密码算法库和SSL协议库写成的,所以也是一些非常好的OpenSSL的API使用范例,读懂所有这些范例,你对OpenSSL的API使用了解就比较全面了,当然,这也是一项锻炼你的意志力的工作。
OpenSSL的应用程序提供了相对全面的功能,在相当多的人看来,OpenSSL已经为自己做好了一切,不需要再做更多的开发工作了,所以,他们也把这些应用程序成为OpenSSL的指令。OpenSSL的应用程序主要包括密钥生成、证书管理、格式转换、数据加密和签名、SSL测试以及其它辅助配置功能。
7.Engine机制 Engine机制的出现是在OpenSSL的0.9.6版的事情,开始的时候是将普通版本跟支持Engine的版本分开的,到了OpenSSL的0.9.7版,Engine机制集成到了OpenSSL的内核中,成为了OpenSSL不可缺少的一部分。 Engine机制目的是为了使OpenSSL能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密。OpenSSL的Engine机制成功地达到了这个目的,这使得OpenSSL已经不仅仅使一个加密库,而是提供了一个通用地加密接口,能够与绝大部分加密库或者加密设备协调工作。当然,要使特定加密库或加密设备更OpenSSL协调工作,需要写少量的接口代码,但是这样的工作量并不大,虽然还是需要一点密码学的知识。Engine机制的功能跟Windows提供的CSP功能目标是基本相同的。目前,OpenSSL的0.9.7版本支持的内嵌第三方加密设备有8种,包括:CryptoSwift、nCipher、Atalla、Nuron、UBSEC、Aep、SureWare以及IBM 4758 CCA的硬件加密设备。现在还出现了支持PKCS#11接口的Engine接口,支持微软CryptoAPI的接口也有人进行开发。当然,所有上述Engine接口支持不一定很全面,比如,可能支持其中一两种公开密钥算法。
8.辅助功能
BIO机制是OpenSSL提供的一种高层IO接口,该接口封装了几乎所有类型的IO接口,如内存访问、文件访问以及Socket等。这使得代码的重用性大幅度提高,OpenSSL提供API的复杂性也降低了很多。
OpenSSL对于随机数的生成和管理也提供了一整套的解决方法和支持API函数。随机数的好坏是决定一个密钥是否安全的重要前提。
OpenSSL还提供了其它的一些辅助功能,如从口令生成密钥的API,证书签发和管理中的配置文件机制等等。如果你有足够的耐心,将会在深入使用OpenSSL的过程慢慢发现很多这样的小功能,让你不断有新的惊喜。
B. 理解RSA算法
如果公钥加密的信息只有私钥解得开,只要私钥不泄露,通信就是安全的.
欧拉函数 ,在数论中,对正整数n,欧拉函数φ(n)是小于或等于n的正整数中与n互质的数的数目.例如:φ(8) = 4,因为1,3,5,7均与8互质.
通式:
如果n=1,则 φ(1) = 1 。因为1与任何数(包括自身)都构成互质关系。
如果n是质数,则 φ(n)=n-1 。因为质数与小于它的每一个数,都构成互质关系。比如5与1、2、3、4都构成互质关系。
如果n是质数的某一个次方,即 n = p^k (p为质数,k为大于等于1的整数),则
如果n可以分解成两个互质的整数之积
n = p1 × p2 则 φ(n) = φ(p1p2) = φ(p1)φ(p2)
如果两个正整数a和n互质,则n的欧拉函数 φ(n) 可以让下面的等式成立:
如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。
这时,b就叫做a的"模反元素"。
比如,3和11互质,那么3的模反元素就是4,因为 (3 × 4)-1 可以被11整除。显然,模反元素不止一个, 4加减11的整数倍都是3的模反元素 {...,-18,-7,4,15,26,...},即如果b是a的模反元素,则 b+kn 都是a的模反元素。
比如,老张和老王是两名地下工作者,老张要向老王传达一个机密的文件.这时老张想到了RSA算法.
(1) 随机选择两个不相等的质数p,q.
这时,老张选择了61和53.
(2) 计算p和q的乘积n.
n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。
(3) 计算n的欧拉函数φ(n).
根据上面所介绍的欧拉定理第四种情况:
(4) 随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质.
这时,老张从1-3120之间,随机选择了17.(实际应用中,常常选择65537).
(5) 计算e对于φ(n)的模反元素d
所谓"模反元素"就是指有一个整数d,可以使得ed被φ(n)除的余数为1。
这个公式等价于
于是,找到模反元素d,实质上就是对下面这个二元一次方程求解。
那么,已知e = 17,φ(n) = 3120 ,求x的值
这个方程可以用"扩展欧几里得算法"求解,此处省略具体过程。总之,老张算出一组整数解为 (x,y)=(2753,15),即 d=2753。
(6) 将n和e封装成公钥,n和d封装成私钥
n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753),即公钥为( n,e ),私钥为( n,d )。
实际应用中,公钥和私钥的数据都采用 ASN.1 格式表达。
老张进行了这些计算后,整理了下上面所提到的数字:
这六个数字之中,公钥用到了两个(n和e),其余四个数字都是不公开的。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。
老张想,有没有可能在已知n和e的情况下,也就是知道公钥的情况下,推导出d?
结论:如果n可以被因数分解,d就可以算出,也就意味着私钥被破解。可是,大整数的因数分解,是一件非常困难的事情.
有了公钥和密钥,就能进行加密和解密了。
1.加密要用公钥 (n,e)
假设老张要向老王发送加密信息m,他就要用老王的公钥 (n,e) 对m进行加密。这里需要注意,m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。
所谓"加密",就是算出下式的c:
老王的公钥是 (3233, 17),老张的m假设是65,那么可以算出下面的等式:
于是,c等于2790,老张就把2790发给了老王。
2.解密要用私钥(n,d)
老王拿到老张发来的2790以后,就用自己的私钥(3233, 2753) 进行解密。可以证明,下面的等式一定成立:(证明过程略,有兴趣可以看阮一峰的博客)
也就是说,c的d次方除以n的余数为m。现在,c等于2790,私钥是(3233, 2753),那么,老王算出
因此,老王知道了老张加密前的原文就是65。
我们可以看到,如果不知道d,就没有办法从c求出m。而前面已经说过,要知道d就必须分解n,这是极难做到的,所以RSA算法保证了通信安全。
你可能会问,公钥(n,e) 只能加密小于n的整数m,那么如果要加密大于n的整数,该怎么办?有两种解决方法:一种是把长信息分割成若干段短消息,每段分别加密;另一种是先选择一种"对称性加密算法"(比如DES),用这种算法的密钥加密信息,再用RSA公钥加密DES密钥。
C. 计算机网络-4-6-互联网的路由选择协议
路由选择协议的核心是 路由算法 。即 需要一种算法来获取路表中的各项 ,一个比较好的路由选择算法应该有以下特点[BELL86]:
一个实际的路由选择算法,应该尽可能的接近于理想的算法,在不同的应用条件下,可以对上面提出的六个方面有不同的侧重。
倘若从路由算法能否随网络的通信量或拓扑自适应的进行调整变化来划分,则只有两大类: 静态路由选择策略 和 动态路由选择策略 。静态路由选择策略也叫做 非自适应路由选择 ,其特点是简单和开销较小,但不能即使适应网络状态的变化。对于很简单的小网络,完全可以采用静态路由选择,用人工配置每一条路由。动态路由选择也叫做 自适应路由选择 ,其特点是能够较好的适应网络状态的变化,但实现起来较为复杂,开销也比较大,因此动态路由选择适用于较复杂的大网络。
互联网采用的路由选择协议主要是自适应的(动态的),分布式路由选择协议。由于以下两种原因,互联网采用分层次的路由选择协议:
为此,可以把整个互联网划分为许多较小的 自治系统AS(autonomous system) ,自治系统AS是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量,一个AS对其他AS表现的出是 一个单一的和一致的路由选择策略 。
在目前的互联网中,一个大的ISP就是一个自治系统。这样,互联网就把路由选择协议划分为两大类:
自治系统之间的路由选择协议也叫做 域间路由选择(interdomain routing) ,而在自治系统内部的路由选择叫做 域内路由选择(intradomain routing) 。如图4-31
RIP(routing information protocol)是内部网关协议IGP中最先得到广泛使用的协议[RFC1058],也叫 路由信息协议 ,RIP是一种分布式的 基于距离向量的路由选择协议 。最大的优点就是简单。
RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(因此这是一组距离,叫做距离向量),RIP将距离定义如下:
从一路由器到直接连接的网络的距离为1,从路由器到非之间的网络的距离定义为所经过的路由器数+1。
RIP协议的距离也称之为 跳数 ,但是一条跳数最多只能包含15个路由器,因此,当距离=16时,就相当于不可达。因此RIP只能适用于小型互联网。
注意的是,到直接连接的网络也定义为0(采用这种定义的理由是:路由器在和直接连接在该网络上的主机进行通信并不需要经过另外的路由器,既然经过每一个路由器都要将距离增加1,那么不经过路由器就不需要+1,就是0)。
RIP不能在两个网络之间同时使用多条路由。RIP选择一条具有最少路由器的路由(最短路由),哪怕还存在另一条高速低延时的但是路由器较多的路由。
路由器在刚开始工作的时候,其内部路由表是空的。然后路由器就可以和直接相连的几个网络的距离(这些距离为1),接着,每个路由器和与自己相连的路由器不断交换路由表信息,经过若干次更新后,所有的路由器最终就可以知道本自治系统中任何一个网络地址和最短下一跳路由器的地址。
路由器最主要的信息是:到某个网路的距离(最短距离),以及下一跳的地址,路由表更新的原则是找出到每个网络的 最短距离 ,这种算法又称之为 距离向量算法 。
对 每一个相邻的路由器 发送过来的RIP报文,进行以下步骤:
算法描述:其实就是求一个路由器到另一个路由器的最短距离。
例题:
已知路由器R6有表4-9(a)所表示的路由表,现在收到相邻路由器路由表R4发过来的路由更新信息,如图4-9(b)所示。试更新路由器R6的路由表。
解:首先把R4发过来的路由表中的距离都+1:
把这个表和R6的路由表进行比较:
RIP协议让每一个自治系统中的所有路由都和自己的相邻路由器定期交换路由表信息,并不断更新路由表,使得每从 每一个路由器到每一个目的网络的路由都是最短距离(也就是跳数最小)。
现在比较新的RIP协议报文格式是1998年提出的RIP2。
RIP协议使用运输层的用户数据报(UDP端口为520)进行传输。
RIP报文由首部和路由部分组成。
RIP首部占4个字节,其中的命令字段指出报文的意义。
RIP2报文中的路由部分有若干路由信息组成,每个路由信息需要用20字节。 地址标识符(又称地址列别) 字段用来标识所用的地址协议。如果采用IP地址就为2。 路由标记填入自治系统号ASN(Autonomous System Number) ,这是考虑使用RIP有可能收到本自治系统以外的路由选择信息,再后面指出某个 网络地址 , 下一跳路由器地址 以及 到此网络的距离 ,一个RIP报文最多可以包含25个路由,因而RIP报文的最大长度是4+20x25=504字节。如果超过,则必然再使用以恶搞RIP报文来传送。
RIP还具有简单的鉴别功能,若使用鉴别功能,则将原来写入第一个路由信息(20字节)的位置用作鉴别,这时应该将地址标识符置为全1(0xFFFF),而路由标记写入鉴别类别,剩下的16字节作为鉴别数据,在鉴别数据之后才能写入路由信息,但这时只能写入24个路由信息。
RIP存在的一个问题是 当网络出现故障的时候,要经过比较长的时间才能将信息传送到所有的路由器 ,RIP协议的这一特点是: 好消息传播的很快,而坏消息传播的很慢 ,网络出现故障的传播时间往往需要经过较长时间,这是RIP协议的一个主要缺点。
为了使坏消息传播的更快些,可以采用多种措施,例如,让路由器记录收到某特定路由信息的接口,而不是让同一个路由信息再通过此接口反方向传送。
总之,RIP协议最大的优点是 实现简单,开销较小 ,但RIP协议缺点也很明显,首先 限制了网络规模,因为路由器最大的跳数是15跳,一般中大型网络规模RIP协议就不适用了 。其次就是 路由器之间交换的路由信息是路由器中完整的路由表,因而随着网络规模变大,开销也就增加 。最后就是 好消息传播的很快,坏消息传播的很慢 。
D. 网络安全-哈希算法和数字签名
常见 HASH 算法:
HASH 算法主要应用:
1)文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2)数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
3)鉴权协议
如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。
数字签名签署和验证数据的步骤如图所示:
PKCS1 和 PKCS7 标准格式的签名:
1. PKCS1签名:即裸签名,签名值中只有签名信息。
2. PKCS7签名:签名中可以带有其他的附加信息,例如签名证书信息、签名原文信息、时间戳信息等。
PKCS7 的 attached 和 detached 方式的数字签名:
1. attached 方式是将签名内容和原文放在一起,按 PKCS7 的格式打包。PKCS7的结构中有一段可以放明文,但明文必需进行ASN.1编码。在进行数字签名验证的同时,提取明文。这里的明文实际上是真正内容的摘要。
2. detached 方式打包的 PKCS7格式包中不包含明文信息。因此在验证的时候,还需要传递明文才能验证成功。同理,这里的明文实际上是真正内容的摘要。
E. 2021-01-30 AES加密算法笔记(一)
密钥
明文
密文
明文和秘文不等长没法执行异或运算
分组加密是:将明文分成多个等长的block模块,对每个模块分别加解密
最后一个明文block模块长度不足时,需要填充
hash函数
GCM工作模式就是 CTR模式加上GMAC完整性校验
GCM = CTR + GMAC
异或
每个参与方都有一对密钥
公钥是对外知道的
知道公钥就是知道(k,n) -> k就是一个随机数 n是两个质数p,q的乘积
->v
->v = (p-1)*(q-1),k 计算k对于v的模反元素d
->(d,n)
难在n是一个大数,分解质因数n得到p,q会比较困难
安全性来源于对一个大数做因式分解特别困难。
ASN.1
解码查看
迫于美国政府压力,server端把私钥给了美国政府
美国政府作为中间人拦截客户端发的消息,公钥发的消息。
然后就用拿到的私钥解密,所有信息都可以看到。
F. ios支付宝怎么把私钥转换成pkcs8 格式
用途:
pkcs8格式的私钥转换工具。它处理在PKCS#8格式中的私钥文件。它可以用多样的PKCS#5 (v1.5 and v2.0)和 PKCS#12算法来处理没有解密的PKCS#8 PrivateKeyInfo格式和EncryptedPrivateKeyInfo格式。
用法:
[cpp] view plain
openssl pkcs8 [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename]
[-passout arg] [-topk8] [-noiter] [-nocrypt] [-nooct] [-embed] [-nsdb] [-v2 alg] [-v1 alg] [-engine id]
选项说明:
-inform PEM|DER::输入文件格式,DER或者PEM格式。DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式。
-outform DER|PEM:输出文件格式,DER或者PEM格式。
-in filename:输入的密钥文件,默认为标准输入。如果密钥被加密,会提示输入一个密钥口令。
-passin arg:输入文件口令保护来源。
-out filename:输出文件,默认为标准输出。如果任何加密操作已经执行,会提示输入一个密钥值。输出的文件名字不能和输入的文件名一样。
-passout arg:输出文件口令保护来源。
-topk8:通常的是输入一个pkcs8文件和传统的格式私钥文件将会被写出。设置了此选项后,位置转换过来:输入一个传统格式的私钥文件,输出一个PKCS#8格式的文件。
-noiter:MAC保护计算次数为1。
-nocrypt:PKCS#8密钥产生或输入一般用一个适当地密钥来加密PKCS#8 EncryptedPrivateKeyInfo结构。设置了此选项后,一个不加密的PrivateKeyInfo结构将会被输出。这个选项一直不加密私钥文件,在绝对必要的时候才能够使用。某些软件例如一些JAVA代码签名软件使用不加密的私钥文件。
-nooct:这个选项产生的RSA私钥文件是一个坏的格式,一些软件将会使用。特别的是,私钥文件必须附上一个八位组字符串,但是一些软件仅仅包含本身的结构体没有使八位组字符串所环绕。不采用八位组表示私钥。
-embed:这个选项产生的RSA私钥文件是一个坏的格式。在私钥结构体中采用嵌入式DSA参数格式。在这个表单中,八位组字符串包含了ASN1 SEQUENCE中的两种结构:一个SEQUENCE包含了密钥参数,一个ASN1 INTEGER包含私钥值。
-nsdb:这个选项产生的RSA私钥文件是一个坏的格式并兼容了Netscape私钥文件数据库。采用NetscapeDB的DSA格式。
-v2 alg:采用PKCS#5 v2.0,并指定加密算法,默认的是PKCS#8私钥文件被叫做B<pbeWithMD5AndDES-CBC>(该算法用56字节的DES加密但是在PKCS#5 v1.5中有更加强壮的加密算法)的加密算法用口令进行加密。用B<-v2>选项,PKCS#5 v2.0相关的算法将会被使用,可以是des3(168字节)和rc2(128字节),推荐des3。
-v1 alg:采用PKCS#5 v1.5或pkcs12,并指定加密算法。可采用的算法见下面。
-engine id:指定硬件引擎。
注意:
加密了的PEM编码PKCS#8文件表单用下面的头部和尾部:
-----BEGIN ENCRYPTED PRIVATE KEY-----
-----END ENCRYPTED PRIVATE KEY-----
未加密的表单用:
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
跟传统的SSLeay算法相比,用PKCS#5 v2.0系列的算法加密私钥,有更高的安全性以及迭代次数。于是附加的安全性是经过深思熟虑的。
默认的加密算法仅仅是56字节的,是因为它是PKCS#8所支持的最好的方法。
有一些软件使用PKCS#12基于密钥的加密算法来加密PKCS#8格式的私钥:它们会自动的处理但是没有选项来操作。
在PKCS#8格式中,有可能的是输出DER编码格式的经过加密的私钥文件,是因为加密的详细说明包含在DER等级中,相反的是传统的格式包含在PEM邓丽中。
PKCS#5 v1.5和 PKCS#12 算法:
各种各样的算法可以被选项-v1所使用。包含PKCS#5 v1.5和 PKCS#12 算法。详细描述如下:
B<PBE-MD2-DES PBE-MD5-DES>:这两个算法包含在PKCS#5 v1.5中。它们仅仅提供56字节的保护,加密算法用DES。
B<PBE-SHA1-RC2-64 PBE-MD2-RC2-64 PBE-MD5-RC2-64 PBE-SHA1-DES>:它们在传统的PKCS#5 v1.5中没有被提到,但是它们用同样地密钥引出算法,被一些软件所支持。在PKCS#5 v2.0中所提到。它们使用64字节的RC2以及56字节的DES。
B<PBE-SHA1-RC4-128 PBE-SHA1-RC4-40 PBE-SHA1-3DES PBE-SHA1-2DES PBE-SHA1-RC2-128 PBE-SHA1-RC2-40>:它们是PKCS#12基于密钥的加密算法,它们允许使用高强度的加密算法,例如3des或128位的RC2。
实例:
用3des算法将传统的私钥文件转换为PKCS#5 v2.0:
[cpp] view plain
openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem
用PKCS#5 1.5兼容的DES算法将私钥文件转换为pkcs8文件:
[html] view plain
openssl pkcs8 -in ocspserverkey.pem -topk8 -out ocspkcs8key.pem
用PKCS#12兼容的3DES算法将私钥文件转换为pkcs8文件:
[html] view plain
openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES
读取一个DER格式加密了的PKCS#8格式的私钥:
[cpp] view plain
openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem
转换一个PKCS#8格式的私钥到传统的私钥:
[cpp] view plain
openssl pkcs8 -in pk8.pem -out key.pem
pkcs8中的私钥以明文存放:
[html] view plain
openssl pkcs8 -in ocspserverkey.pem -topk8 -nocrypt -out ocspkcs8key.pem
标准:
PKCS#5 v2.0的测试向量的实现是以通告的形式用高强度的迭代次数算法3DES、DES和RC2来加密的。很多人要确认能够解密产生的私钥。
PKCS#8格式的DSA私钥文件没有备注文件中的:在PKCS#11 v2.01中的11.9节被隐藏了的。OpenSSL的默认DSA PKCS#8私钥格式隐藏在这个标准中。
BUGs:
必须有一个选项打印使用的加密算法的其他详细细节,例如迭代次数。
PKCS#8用3DES和PKCS#5 v2.0必须是默认的私钥文件:目前为了命令的兼容性。