BASE64 编解码原理:
将数据编码成 BASE64 编码时,以 3 字节数据为一组,转换为 24bit 的二进制数,将 24bit
的二进制数分成四组,每组 6bit。对于每一组,得到一个数字:0-63。然后根据这个数字查表即得到结果。表如下:
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
编码过程如下:
1)得到 16 进制数据: 30 82 02
2)得到二进制数据: 00110000 10000010 00000010
3)每 6bit 分组: 001100 001000 001000 000010
4)得到数字: 12 8 8 2
5)根据查表得到结果 : M I I C
BASE64 填充:在不够的情况下在右边加 0。
有三种情况:
1) 输入数据比特数是 24 的整数倍(输入字节为 3 字节整数倍),则无填充;
2) 输入数据最后编码的是 1 个字节(输入数据字节数除 3 余 1),即 8 比特,则需要填充 2 个"==",因为要补齐 6 比特,需要加 2 个 00;
3)输入数据最后编码是 2 个字节(输入数据字节数除 3 余 2),则需要填充 1 个"=",因
为补齐 6 比特,需要加一个 00。
举例如下:
对 0x30 编码:
1) 0x30 的二进制为:00110000
2) 分组为:001100 00
3) 填充 2 个 00:001100 000000
4) 得到数字:12 0
5) 查表得到的编码为 MA,另外加上两个==
所以最终编码为:MA==
base64 解码是其编码过程的逆过程。解码时,将 base64 编码根据表展开,根据有几个
等号去掉结尾的几个 00,然后每 8 比特恢复即可。
Openssl 使用 PEM(Privacy Enhanced Mail)格式来存放各种信息,它是 openssl 默认采
用的信息存放方式。Openssl 中的 PEM 文件一般包含如下信息:
1) 内容类型
表明本文件存放的是什么信息内容,它的形式为“-------BEGIN XXXX ------”,
与结尾的“------END XXXX------”对应。
2) 头信息
表明数据是如果被处理后存放,openssl 中用的最多的是加密信息,比如加密
算法以及初始化向量 iv。
3) 信息体
为 BASE64 编码的数据。
举例如下:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,9CFD51EC6654FCC3
g2UP/2EvYyhHKAKafwABPrQybsxnepPXQxpP9qkaihV3k0uYJ2Q9qD/nSV2AG9Slqp0HBom
nYS35NSB1bmMb+oGD5vareO7Bt+XZgFv0FINCclTBsFOmZwqs/m95Af+BBkCvNCct+ngM+
UWB2N8jXYnbDMvZGyI3ma+Sfcf3vX7gyPOEXgr5D5NgwwNyu/LtQZvM4k2f7xn7VcAFGm
mtvAXvqVrhEvk55XR0plkc+nOqYXbwLjYMO5LSLFNAtETm9aw0nYMD0Zx+s+8tJdtPq+Ifu
3g9UZkvh2KpEg7he8Z8vaV7lpHiTjmpgkKpx9wKUCHnJq8U3cNcYdRvCWNf4T2jYLSS4kxd
K2p50KjH8xcfWXVkU2CK9NQGlh18TmPueZOkSEHf76KTE9DWKAo7mNmcByTziyofe5qK
htqkYYVBbaCFC0+pKTak4EuLgznt6j87ktuXDXFc+50DnWi1FtQN3LuQH5htl7autzaxCvenfG
QByIh7gxCygBVCJdWca3xE1H0SbRV6LbtjeB/NdCvwgJsRLBXXkjU2TKy/ljsG29xHP2xzlvOt
ATxq1zMMwMKt7kJMFpgSTIbxgUeqzgGbR7VMBmWSF4bBNnGDkOQ0WLJhVq9OMbzpB
zmGJqHn3XjZ2SPXF4xhC7ZhAMxDsFs35P4lPLDH/ycLTcLtUmVZJzvPvzh2r56iTiU28f/rMnH
n1xQ92Cf+62VgECI6CwTotMeM0EfGdCQCiWjeqrzH9qy8+VN3Q2xIlUZj7ibO59YO1A5zVxp
KcQRamwyIy/IYTPr2c2wLfsTZPBt6mD4=
-----END RSA PRIVATE KEY-----
本例是作者生成的一个 RSA 密钥,以 PEM 格式加密存放,采用了 openssl 默认的对称
加密算法。其中,“-----BEGIN RSA PRIVATE KEY-----”表明了本文件是一个 RSA 私钥;
DES-EDE3-CB 为对称加密算法,9CFD51EC6654FCC3 为对称算法初始化向量 iv。
X509 数字证书
数字证书是将用户(或其他实体)身份与公钥绑定的信息载体。一个合法的数字证书
不仅要符合 X509 格式规范,还必须有 CA 的签名。用户不仅有自己的数字证书,还必
须有对应的私钥。
X509v3 数字证书主要包含的内容有[1]:证书版本、证书序列号、签名算法、颁发
者信息、有效时间、持有者信息、公钥信息、颁发者 ID、持有者 ID 和扩展项。
证书验证项
数字证书验证中,主要考察的项有:
i. 有效期,看证书是否已经失效;
ii. 签名,用颁发者的公钥来验证签名;
iii. 证书用途;
iv. 名字比较,证书中的颁发者信息应与颁发者证书的持有者信息一致;
v. 扩展项约束;
CRL 介绍
证书撤销列表(Certificate Revocation List,简称 CRL),是一种包含撤销的证书列表的签
名数据结构。CRL 是证书撤销状态的公布形式,CRL 就像信用卡的黑名单,用于公布某些
数字证书不再有效。
CRL 是一种离线的证书状态信息。它以一定的周期进行更新。CRL 可以分为完全 CRL
和增量 CRL。在完全 CRL 中包含了所有的被撤销证书信息,增量 CRL 由一系列的 CRL 来
表明被撤销的证书信息,它每次发布的 CRL 是对前面发布 CRL 的增量扩充。
基本的 CRL 信息有:被撤销证书序列号、撤销时间、撤销原因、签名者以及 CRL 签名
等信息。
基于 CRL 的验证是一种不严格的证书认证。CRL 能证明在 CRL 中被撤销的证书是无
效的。但是,它不能给出不在 CRL 中的证书的状态。如果执行严格的认证,需要采用在线
方式进行认证,即 OCSP 认证。
在线证书状态协议(OCSP,Online Certificate Status Protocol,rfc2560)用于实时表明
证书状态。OCSP 客户端通过查询 OCSP 服务来确定一个证书的状态。OCSP 可以通过 HTTP
协议来实现
加密消息语法(pkcs7),是各种消息存放的格式标准。这些消息包括:数据、签名数据、
数字信封、签名数字信封、摘要数据和加密数据。
pkcs12 (个人数字证书标准)用于存放用户证书、crl、用户私钥以及证书链。pkcs12 中的
私钥是加密存放的。
SSL 协议最先由 netscape 公司提出,包括 sslv2 和 sslv3 两个版本。当前形成标准的
为了 tls 协议(rfc2246 规范)和 DTLS(rfc4347,用于支持 UDP 协议)。sslv3 和 tls 协议大
致一样,只是有一些细微的差别。实际应用中,用的最多的为 sslv3。
SSL 协议能够保证通信双方的信道安全。它能提供数据加密、身份认证以及消息完
整性保护,另外 SSL 协议还支持数据压缩。
SSL 协议通过客户端和服务端握手来协商各种算法和密钥。
asn1parse 命令是一种用来诊断 ASN.1 结构的工具,也能用于从 ASN1.1 数据中提取数
据。
用法:
openssl asn1parse [-inform PEM|DER] [-in filename] [-out filename] [-noout] [-offset
number] [-length number] [-i] [-oid filename] [-strparse offset] [-genstr string ] [-genconf file]
选项:
-inform PEM|DER
输入数据的格式为 DER 还是 PEM,默认为 PEM 格式。
-in filename
输入文件名,默认为标准输入。
-out filename
输出文件名,默认为标准输出,给定一个 PEM 文件,采用此选项可用生成一
个 DER 编码的文件。
-noout
无输出打印。
-offset number
数据分析字节偏移量,分析数据时,不一定从头开始分析,可用指定偏移量,
默认从头开始分析。
-length number
分析数据的长度,默认的长度为整个数据的长度;
-i
标记实体,加上此选项后,输出会有缩进,将一个 ASN1 实体下的其他对象缩
进显示。此选项非默认选项,加上此选项后,显示更易看懂。
-dump
显示十六进制数据。非默认选项。
-dlimit number
与-dump 不同,-dump 显示所有的数据,而此选项只能显示由 number 指定数目的
十六进制数据。
-oid file
指定外部的 oid 文件。
-strparse offset
此选项也用于从一个偏移量开始来分析数据,不过,与-offset 不一样。-offset
Click to buy NOW!
PDF-XChange Viewer
www.docu-track.co m
Click to buy NOW!
PDF-XChange Viewer
www.docu-track.co m
269
分析偏移量之后的所有数据,而-strparse 只用于分析一段数据,并且这种数据必须
是 SET 或者 SEQUENCE,它只分析本 SET 或者 SEQUENCE 范围的数据。
对称加密算法的四种模式: CBC, ECB, CFB, OFB
OpenSSL提供了pkcs8指令来执行 PKCS#8标准相关的工作。它可以把私钥转化为PKCS#8的格式,也可以把 PKCS#8格式的私钥转换成其他存储标准的格式。OpenSSL的pkcs8指令对加密和非加密格式的私钥都能进行处理
加密的 PKCS#8密钥标识如下:
—BEGINENCRYPTEDPRIVATEKEY—
—ENDENCRYPTEDPRIVATEKEY—
非加密的 PKCS#8密钥标识如下:
—BEGINPRIVATEKEY—
—ENDPRIVATEKEY—