使用VIM将一行X509证书分解为多行的方式

简介:

引:
数字证书有多种格式,对于经过base64编码的证书而言,如果你将所有内容合并成一行,微软操作系统还是能正确解析的,然而如果你使用OpenSSL的x509命令解析,就会报错,可见,微软的兼容行太强了,特别是对自己的东西。
     今日工作中遇到合为一行的数字证书,在windows下可以被认出,然而在Linux下却不行,于是需要将一行的证书分解为64个字符一行的证书,然后加上-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----,本文解析两种方式,完成将一行证书变为N行base64编码证书的方式,两种方式均使用vim。
零.初始数据:

MIICBzCCAa8CCqwerC6hedfrvjAJBgabcdjOPQQBMIGKMQswCQYDVQQGEwJDTjELMAkGA1UECBMCU0gxETAPBgNVBAcTCFNoYW5na5678RYwFAYDVQQKEw1Lb2FsIFNvZnR3YXJlMRIwEAzGFpMLEwlTU0wgR1qazXAxDzANBgsdfgMTBmVjYy1jYTEeMBwGCSqGSIb3DQEJARYPZWNjLWNhQGtvYWwuY29tMB4XDTExMDExODsdfgUxM1oXDTExMDIxNzA0NDUxM1owgY4xCzAJBgNVBAYTAkNOMQswCQY2323IEwJTSDERMA8GA1UEBxMIU2hhbmdoYWkxFjAUBgNVBAoTDUtvYWwgU29mdHdhcmUxEuiopgNVBAsTCVNTTCBHcm91cDERMA8GA1UEAxMIZWNjLXVzZXIxIDAeBgkqhkiG9w0BCQEWEWV12341c2VyQGtvYWwuY29tMFkwEwYHKoZIzj0CAQYIKoEcgUUBgi0DQgAEl1iWcIeqYpigXDziJ4GS9M+23bE8qemaJvjpBOEXveF0eMJUN2udNJzHW/WpvTZrJCYp/mZsXnY+gdkAQIrXWjAJBgcqhkjOPQQBA0cAMEQCIGiWpXNEp4aKT2GzACBUvs0tZQLTan/ULKX/vTHZCv4FAiAb2s9u4G2SxgiEpWzhdMIuM3WsgbrazxsxSfLLG1234567
以上是初始数据,以一整行的方式保存了整个数字证书(以经过本人改写,毕竟证书不能随意暴露...),需要将之整理成每64个字符一行的base64编码方式,也就是OpenSSL的pem格式证书(去除头尾)。
一.动态的方式
所谓动态的方式就是用“人的操作方式”进行换行符号的插入,无非就是64个字符作为间隔向前推进,然后插入回车符,因此可以使用如下步骤:
1.定位到64个字符处:
64l
2.进入插入模式:
i
3.拍入回车:
Enter
4.退出插入模式
Esc
5.重复1-4,重复N次,视文件大小而定
从以上步骤,我们发现,人为的操作其实是一系列确定而且重复的操作,因此我们希望使用诸如宏的方式来完成这个任务,vim拥有宏录制的功能,命令模式下输入qX就可以录制名为X的宏,因此我们只需要以下步骤就可以完成一个一整行证书的base64编码:
<q>b        #q开始录制名字是b的宏
64<l>        #光标右移64个字符
<i>        #进入插入模式
<Enter>        #插入换行
<Esc>        #退出插入模式
<q>        #结束录制宏b
num<@><b>    #将宏b执行num次,视文件行大小而定
6.效果:和静态方式一样,见静态方式。
动态的方式肯定能完成这个任务,然而还有静态的方式
二.静态的方式
静态方式是计算机使用的方式,计算机使用程序完成这个任务,虽然计算机程序最终也是人编写的。计算机程序完成64间隔字符换行的方式使用一种算法,这种算法明显不符合人的思维方式。正如人类会使用等差数列求和公式计算等差数列和然而计算机必须使用递推或者递归方式一样,计算机程序没有归纳的能力,不会使用公式,只能按步骤进行。
1.在一个新窗口打开help手册
:help
2.打开change.txt这个help页
:help change
...
3.找到了替换语法
:[range]s[ubstitute]/{pattern}/{string}/[&][c][e][g][p][r][i][I] [count]
                        For each line in [range] replace a match of {pattern}
                        with {string}.
                        For the {pattern} see |pattern|.
                        {string} can be a literal string, or something
                        special; see |sub-replace-special|.
            ...
显然在特定位置插入换行是一个“特殊”的需求
4.打开sub-replace-special
:help sub-replace-special
5.找到了以下的解释
magic   nomagic   action
      /0          replaced with the whole matched pattern          */0* *s//0*
在s/orig/string/g中,orig是一个位置,该位置只能由正则表达式指定,其正则表达式为:.{64},而string则是一个换行符号,根据上面的解释,string应该为/0/r
6.退出help
:q
7.开始修改
:s/./{64/}//0/r/g
8.效果
MIICBzCCAa8CCqwerC6hedfrvjAJBgabcdjOPQQBMIGKMQswCQYDVQQGEwJDTjEL
MAkGA1UECBMCU0gxETAPBgNVBAcTCFNoYW5na5678RYwFAYDVQQKEw1Lb2FsIFNv
ZnR3YXJlMRIwEAzGFpMLEwlTU0wgR1qazXAxDzANBgsdfgMTBmVjYy1jYTEeMBwG
CSqGSIb3DQEJARYPZWNjLWNhQGtvYWwuY29tMB4XDTExMDExODsdfgUxM1oXDTEx
MDIxNzA0NDUxM1owgY4xCzAJBgNVBAYTAkNOMQswCQY2323IEwJTSDERMA8GA1UE
BxMIU2hhbmdoYWkxFjAUBgNVBAoTDUtvYWwgU29mdHdhcmUxEuiopgNVBAsTCVNT
TCBHcm91cDERMA8GA1UEAxMIZWNjLXVzZXIxIDAeBgkqhkiG9w0BCQEWEWV12341
c2VyQGtvYWwuY29tMFkwEwYHKoZIzj0CAQYIKoEcgUUBgi0DQgAEl1iWcIeqYpig
XDziJ4GS9M+23bE8qemaJvjpBOEXveF0eMJUN2udNJzHW/WpvTZrJCYp/mZsXnY+
gdkAQIrXWjAJBgcqhkjOPQQBA0cAMEQCIGiWpXNEp4aKT2GzACBUvs0tZQLTan/U
LKX/vTHZCv4FAiAb2s9u4G2SxgiEpWzhdMIuM3WsgbrazxsxSfLLG1234567
9.然而!然而
然而为什么在这个任务中,计算机程序使用了公式(正则表达式),而人类的方式却使用了按照步骤的方式(录制宏)呢?...
注释:上述第9点是动态方式和静态方式共同的结果。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1270964

相关文章
|
人工智能 Linux 开发工具
linux 对文件内容的查看、归档 及 vim基本操作
linux 对文件内容的查看、归档 及 vim基本操作
|
Unix Linux 开发工具
在Linux中,有哪些基本的 Vim 命令?
在Linux中,有哪些基本的 Vim 命令?
|
小程序 Linux 开发工具
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
|
搜索推荐 Linux 开发工具
|
存储 Linux 编译器
linux中vim介绍以及常用命令大全
linux中vim介绍以及常用命令大全
544 8
|
Linux Shell 持续交付
Linux下vim的配置
本文介绍了如何对vim进行基础配置,如行号显示、缩进设置等,并推荐了一种自动化部署方案,通过链接下载预配置的vim环境脚本,简化了配置过程,提升开发效率。
776 3
Linux下vim的配置
|
存储 Linux Shell
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件
这篇文章介绍了Vim编辑器的基本使用、常用命令和模式,以及Linux系统中用户和组的管理方法,包括用户和组相关文件如/etc/passwd、/etc/shadow和/etc/group的说明。
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件
|
Linux Shell 开发工具
Linux Vim批量注释和自定义注释
在Vim中,快速批量注释和取消Shell脚本的多行可以使用替换命令。例如,用`:1,10s/^/#/g`在第1到10行行首加`#`注释,`:1,10s/^#//g`则移除这些行的行首`#`。定义快捷键如`:map^P l#&lt;Esc&gt;`(需用Ctrl+V+P生成^P)能一键在当前行添加`#`注释。要取消注释,可以定义`:map^B 0x`来删除行首字符。通过`.vimrc`保存快捷键设置,可使它们在每次启动Vim时生效。
997 6
|
Ubuntu Unix Linux
Linux Vim最全面的教程
Linux Vim最全面的教程
|
Unix Linux 开发工具
Linux Vim的 命令大全
Linux Vim的 命令大全
482 0