Skip to content

Latest commit

 

History

History
253 lines (150 loc) · 15.1 KB

小工具使用手册.md

File metadata and controls

253 lines (150 loc) · 15.1 KB

小工具使用手册 MANNUAL


1. Base64 工具 base

base 工具用于 base64,可编码和解码。这个程序用一些参数来调整相应的功能。当使用选项参数“-e”时,程序设定为编码(encode),当使用“-d”的时候程序设定为解码。除了编解码的选项之外,还能通过“-i”和“-o”两个选项设定输入和输出的数据格式。由于编码和解码的时候输入的数据不一样,因此对这两个选项需要分开说明。

* 编码:
* -i: 该参数用于设定输入的数据类型。当使用 -e 用于做 base64 编码时,可支持的数据有 **字符串(raw)** 和 **16进制字符串(hex)**。当输入为裸字符串,如 "12345678" , “小工具” 等时,需要在 -i 后使用 "raw" 或 "r" 说明。示例:

 > base -e123456712345678 -ir 

当输入为16进制字符串时,如“12 EF C2 9D”的等时,需要在-i后指定"hex"或"h"。示例:
 > base -e"12 EF C2 9D" -ih

 *注:入参可以含有空格或回车,但是需要用双引号括起来。*

事实上,16进制的输入为默认数据输入格式,如果设定为编码模式,如果不指定输入数据格式,将默认作为16进制字符串处理。如果不是16进制字符串则会报错。示例:

> base -e "12 EF C2 9D"

* -o: 该参数用于设定输出的数据类型,在编码模式下只有base64编码字符串输出,没有其他选项。

* 解码:

*  -i: 该参数用于设定输入的数据类型。当使用base64解码的时候,只有base64格式的字符串可以输入。示例:

> base -ddXNlIHRoZSBkZWZhdWx0IG9uZQ==
* -o: 该参数用于设定输出的数据类型。当使用解码模式时,可支持:

    * 16进制字符串 —— hex
    * 带"0x"的16进制字符串 —— x
    * 裸字符串 —— raw

    三种格式。其中,16进制字符串输出样式为:

    > base -d MTIzNDU2NzgxMjM0NTY3OA==

    带"0x"的16进制字符串为(该输出格式是为了方便将输出字符串直接放到代码中作为数组表示):

    > base -d MTIzNDU2NzgxMjM0NTY3OA== -ox

    裸字符串样式为:

    > base -d MTIzNDU2NzgxMjM0NTY3OA== -or

* 帮助:

程序带简略的说明,为保证编码兼容,使用utf-8编码的英文输出,可输入 -h 获取说明。

2. 生成SM2密钥对 ECC_genkeypair

该程序可快速生成一对 SM2 密钥对。仅需直接执行该程序即可,生成的公、私钥均为不带结构的格式。公钥以 pubkey 标明,私钥以 prikey 标明。 使用示例:

ECC_genkeypair

3. 验证SM2密钥对是否匹 ECC_checkkey

该程序可用于验证SM2密钥对是否匹配,因此要求输入一个base64格式的公钥和一个base64格式的私钥。输入的公钥和私钥要求是完全不带结构的,因此公钥长度应为88字节,私钥长度应为44字节。

输入数据的先后顺序无所谓,程序会自动将较长的数据判定为公钥,另一个判定为私钥。如果密钥对匹配,程序会自动输出:“Key is paired!”

ECC_checkkey N0ZsUw/kw6hFF05dkwPV5MmhV29SYkjy2avlKHj0abk= gxvn7nWydqPdrZb1qcMEfuvsx5dpq0sXMXkK/hyhrfB0ts8w1BRV0KIUjhFDeVMtRfSBzecX3QbKkksAEQ5Ing==

反之,如果密钥对不匹配,则会输出与输入私钥匹配的公钥值,如:

ECC_checkkey N0ZsUw/kw6hFF05dkwPV5MmhV29SYkjy2avlKHj0abk= gxvn7nWydqPdrZb1qcMEfuvsx5dpq0sXMXkK/hyhrfB0ts8w1BRV0KIUjhFDeVMtRfSBzecX3QbKkksAE95Ing==

4. SM2加密 ECC_encrypt

该程序用于SM2加密,需要的参数有原文及SM2公钥,此外输入及输出的格式可选。该程序接收的参数详细说明如下:

  • 公钥:-p/P (pubkey)输入为base64编码的裸公钥,加上两个等号后长度应为88字节。

  • 明文:-d/D (data)后跟需要被加密的明文,明文格式可以为base64形式、16进制形式以及字符串形式,明文的数据需要使用 "-i" 的标识选项来声明:

    • -ib / -iB:以base64形式输入明文,示例:

    ECC_encrypt -pgxvn7nWydqPdrZb1qcMEfuvsx5dpq0sXMXkK/hyhrfB0ts8w1BRV0KIUjhFDeVMtRfSBzecX3QbKkksAEQ5Ing== -d1234 -ib

    注:事实上,如果不指定,程序默认输入明文为base64编码,因此当输入为base64编码时,可以不指定输入模式

    • -ih / -iH:以16进制形式字符串输入明文,示例:

    ECC_encrypt -pgxvn7nWydqPdrZb1qcMEfuvsx5dpq0sXMXkK/hyhrfB0ts8w1BRV0KIUjhFDeVMtRfSBzecX3QbKkksAEQ5Ing== -d "12 34" -ih

    • -ir:以直接编码的字符串形式输入明文,示例:

    ECC_encrypt -pgxvn7nWydqPdrZb1qcMEfuvsx5dpq0sXMXkK/hyhrfB0ts8w1BRV0KIUjhFDeVMtRfSBzecX3QbKkksAEQ5Ing== -d1234 -ir

    • 输出格式:输出格式有base64和16进制字符串两种,以"-o"指定,详细说明如下:

      • base64形式输出:-ob /-oB:默认输出模式即为base64模式,可以不用特意指定。
      • 16进制输出:-oh /-oH:以16进制输出,示例如下:

      ECC_encrypt -pgxvn7nWydqPdrZb1qcMEfuvsx5dpq0sXMXkK/hyhrfB0ts8w1BRV0KIUjhFDeVMtRfSBzecX3QbKkksAEQ5Ing== -d1234 -oh

      注:由于没有指定明文的输入格式,程序会以base64编码解释该输入

5. SM2解密 ECC_decrypt

该程序可用于解密SM2密文。输入base64编码的私钥和SM2密文,若解密成功会输出base64编码的明文。该程序接受的参数说明如下:

  • 私钥:-k (private key)后放置不带结构的私钥原文的base64编码,含等号长度应为44字节。

  • SM2密文:-c (cipher)后放置密文,密文格式为:

示例数据:

04 .... 开头一字节的04用于标识密文格式

0D 31 B7 CA C0 55 D8 DB EE 8A 5A 82 92 45 C1 BF .... 64字节C1 E9 55 19 D1 E2 7D E7 D8 05 0D 29 04 4A 79 A3 D7 A9 55 7F 2F 60 2A E9 EA 8C 0D 6F 08 EF 8B 40 00 64 7F 2B 18 41 DD E7 1C 92 05 44 43 4B 86 42 84

7D 4B EA 89 C6 3C DA 56 CA 1C EB BE 05 9C 6E 53 .... 32字节C3 D8 E5 88 4E F8 8D 26 2D 27 D2 FD A4 B2 32 EA 36

F3 4D 44 D2 EC B0 2E 2C 68 A8 4D 83 .... C2(长度和明文一致)

  • 帮助手册:-h 控制台可输出简要的英文参数说明。

使用示例:

ECC_decrypt -cBLCkFtvsBgxm7PfSw4VGn3RaiGbMk9RNkjqxmBDbupEmvtWTPhEwelTD/O7zjpL9h6OgbODBSn1u5gSSH6YW5Lmw5XWowK+gEOBfJKMzFUiq7PFJPlylBGhGT9MI/xL0l1V/tg== -kWw5pyFYtXtcHGqxQ+wU6Jw+sDGYQIF1l/PY+hSt8QF4=

注:公钥为:G34kf8u8oXThdrcaWPWbVTbdJdnQ6XLw8/1NSkni1bUWaR9g1zbtQN2M6dKY33eKhfSNYGmwg1rHQ/XpcWMzDg==

6. 杂凑 digest

该程序用于对数据做杂凑或对数据做SM3预处理。支持的杂凑算法有:sm3、sha1、sha256,如果指定sm3算法且输入了公钥,将自动对数据进行预处理的操作。而如果不指定算法,将自动以sm3算法对数据进行摘要处理。除此之外,也可对输入和输出的模式进行设定。

  • 算法algorithm: -a sm3\sha1\sha256

  • 公钥pubkey: -p 如果指定sm3算法,则可以用该选项,该选项直接对输入原文进行预处理操作。默认ID为1234567812345678,此ID不支持更换。公钥输入格式为裸的填充“=”的base64编码的公钥,一般应有两个“=”,长度一共88字节。

  • 原文:-d 后放置待杂凑的原文。输入原文的格式可分为三种,以下分别说明:

    • 如果不指定或者指定 -ibase / -ib,则程序将以base64的形式读取原文,解码后进行杂凑。
    • 如果指定-ihex /-ih,则程序以16进制字符串的形式读取原文,将原文转成字节数组后(ASCII码)后进行摘要。
    • 如果指定 -iraw / -ir,则程序将直接对输入原文进行杂凑或预处理。注意,如果输入是非ascii的话,将按系统的配置对字符进行编码,linux下默认为unicode-8编码。
  • 输出格式:-o 指定输出格式,输出格式有两种,为16进制表示的字符串或base64编码形式。

    • -o hex指定输出原文格式为16进制表示的字符串;
    • -o base64 指定以base64编码形式输出。
  • 帮助说明:-h 控制台可输出简要的英文参数说明。

使用示例:

digest -d 1234 -iraw // 使用sm3算法对裸字符串“1234”做摘要 digest -d 1234 -asha1 -iraw -oh // 使用sha1算法对裸字符串"1234"做摘要,输出以16进制字符串表示 digest -d 1234 -pG34kf8u8oXThdrcaWPWbVTbdJdnQ6XLw8/1NSkni1bUWaR9g1zbtQN2M6dKY33eKhfSNYGmwg1rHQ/XpcWMzDg== -asm3 // 使用公钥对base64编码的字符串"1234"做预处理

7. SM2签名工具 ECC_sign

该工具用于SM2签名。对于原文,可接受真实的原文或者已完成预处理的值。参数说明如下:

  • 原文:-d (data) 可接受两种原文,一种是base64编码的原文字符串,长度不限。当传入原文字符串时,需要传入公钥,并传入杂凑标记 -h 使程序对原文进行预处理;当原文为已做过预处理的base64字符串时,无需再传公钥和杂凑标记。

  • 公钥:-p (public key) 公钥不带格式,为64字节的裸公钥使用base64编码表示。

  • 私钥:-k (private key) 私钥不带格式,为32字节的裸私钥使用base64编码表示

  • 杂凑标记:-h (hash flag) 当需要对原文进行预处理时需要传入该标记

使用示例:

ECC_sign -d 123434== -kN0ZsUw/kw6hFF05dkwPV5MmhV29SYkjy2avlKHj0abk= -pgxvn7nWydqPdrZb1qcMEfuvsx5dpq0sXMXkK/hyhrfB0ts8w1BRV0KIUjhFDeVMtRfSBzecX3QbKkksAEQ5Ing== -h // 对base64编码的数据"123434=="先做预处理,后签名 ECC_sign -dN0ZsUw/kw6hFF05dkwPV5MmhV29SYkjy2avlKHj0abk= -kN0ZsUw/kw6hFF05dkwPV5MmhV29SYkjy2avlKHj0abk= // 对base64编码的字符串"N0ZsUw/kw6hFF05dkwPV5MmhV29SYkjy2avlKHj0abk="直接签名

8. SM2验签工具 ECC_verify

该工具用于做SM2验签使用,接收三个base64格式的参数:

公钥(pubkey)、原文(data)(可接受已做过预处理的数据以及未做预处理的原始数据)、签名值(signature)以及一个用来标识数据是否已做过预处理的标识“-h”。

以上四个参数说明如下:

  • 公钥pubkey: -p/-P 后跟base64形式的裸公钥,如:

    XgMcykGJZI46LGnelGTEfDbEfQfsmDjM8j3i1DrG9D3n58PkAXCucYmAWc3tmKLGdq1UT1XYUoOkhh4cLLQ7/Q==

    16进制表示为:

    5E 03 1C CA 41 89 64 8E 3A 2C 69 DE 94 64 C4 7C

    36 C4 7D 07 EC 98 38 CC F2 3D E2 D4 3A C6 F4 3D

    E7 E7 C3 E4 01 70 AE 71 89 80 59 CD ED 98 A2 C6

    76 AD 54 4F 55 D8 52 83 A4 86 1E 1C 2C B4 3B FD

  • 原文data: -d/-D 后跟base64形式的原文,如果是未做过预处理的原文,则需要由程序完成预处理工作,使用"-h"标识(hashed)进行显示说明;若是已做预处理的原文,则不需要特意说明。

  • 签名值signature: -s/-S 后跟base64形式的裸签名值,如:

    Oeuw7Z97d9Hha3L2RHV+4mVAf/iaevN/MCRGVPiCJZwBjXZpaf09p1sREaMvKmjFCL+f4EGQ0OfQxeDxNTq7/w== 39 EB B0 ED 9F 7B 77 D1 E1 6B 72 F6 44 75 7E E2

    65 40 7F F8 9A 7A F3 7F 30 24 46 54 F8 82 25 9C

    01 8D 76 69 69 FD 3D A7 5B 11 11 A3 2F 2A 68 C5

    08 BF 9F E0 41 90 D0 E7 D0 C5 E0 F1 35 3A BB FF

如果验签成功,会在敲入回车后输出**"Verify successful"**字样。完整的调用示例如下:

ECC_verify -d123434== -pgxvn7nWydqPdrZb1qcMEfuvsx5dpq0sXMXkK/hyhrfB0ts8w1BRV0KIUjhFDeVMtRfSBzecX3QbKkksAEQ5Ing== -h -s z/E3vRYA7kuyG5i/ARJZhbOmvanry33r+lNCYje+AxcI/pGOvbln/HTgEG3DgcNOYjNUDPe3rxJah8oPf0Qcsg== // 由程序对base64编码的字符串"123434=="预处理后验签 ECC_verify -d+CT3/CORvB3/Ufp+ay+PmUFGSQVkp/98tgIdiU4nn+E= -pgxvn7nWydqPdrZb1qcMEfuvsx5dpq0sXMXkK/hyhrfB0ts8w1BRV0KIUjhFDeVMtRfSBzecX3QbKkksAEQ5Ing== -sz/E3vRYA7kuyG5i/ARJZhbOmvanry33r+lNCYje+AxcI/pGOvbln/HTgEG3DgcNOYjNUDPe3rxJah8oPf0Qcsg== // 输入data为以完成预处理的结果

9. 随机数生成 random

使用梅森旋转法生成高质量随机数,可用作私钥或对称密钥使用。该程序只接收待生成随机数长度这一个参数,使用方法示例如下:

random 1025

生成的随机数会以base64编码的方式输出到控制台。为了方便获取随机数长度,将以每1024字节一组的方式表示。

10. 对称算法 symfunc

该程序完成对称加密、解密算法的运算,包含SM4、AES、DES、3DES四种算法,支持ECB、CBC、CFB、OFB四种模式,并可使用参数选项决定输出方式是base64字符串还是原文字符串。参数说明如下:

* 方法类型(加密或解密):-f 该参数指定本次运算是加密还是解密。当加密时,需要传入 -fe (encrypt);当需要解密时,传入 -fd (decrypt)。

* 输入数据:-d 指定其后跟随的输入数据。可以接受两种输入数据的格式:base64编码的原文或者裸字符串。输入数据的格式在 -i 选项中指定。注意,当输入数据包含空格时需要使用半角双引号对原文注释,如: "123 123 123",否则程序将无法完整读取输入参数。

* 对称密钥:-k 指定其后跟随的数据为对称密钥。这里对称密钥只可以接受base64编码的数据。

* 对称算法模式:-m 指定对称算法应用模式。应用模式包含ECB、CBC、CFB、OFB四种,需要在 “-m” 参数后紧跟模式的字符串,不区分大小写,如:
"symfunc -f d -m ecb ..." 指定解密算法使用ECB模式。

* 对称算法的算法标识:-a 指定具体的对称算法。对称算法这里包含SM4、AES、DES、3DES、SM1五种类型,需要在 “-a” 参数后紧跟算法字符串,不区分大小写,如: "symfunc -f e -m cbc -a aes ..." 指定采用aes-cbc(-m cbc -a aes)的算法对数据进行加密(-f e)

* 输入数据编码格式:-i 指定输入原文的编码方式,包含原文字符串和base64编码字符串两种。-i 之后的选项可接字母 r (raw)以及字母 b (base64) 分别表示字符串和base64编码字符串。如: "symfunc -f e -m ecb -a sm4 -d "123456789" -i r" 表示使用sm4-ecb模式对输入数据"12345678"加密,输入数据的编码格式为原文字符串。

* 指定填充模式:-p 该选项指定填充方式,目前只有pkcs#5填充一种方式。当指定需要填充时,若当前为加密则对加密完的数据进行填充处理;若当前为解密则对解密完的数据进行去填充处理。

* 帮助手册:-h 控制台可输出简要的英文参数说明。

完整使用样例:

symfunc -f e -mcbc -asm4 -k MTIzNDU2NzgxMjM0NTY3OA== -d hellohello -ir // 使用base64编码为MTIzNDU2NzgxMjM0NTY3OA==的对称密钥对字符串"hellohello进行SM4-CBC的加密"

11. 替换证书公钥 certsubpubkey

该程序仅为自用。因为会遇到有时候需要临时给一个公钥做出相应证书的情况,而重新申请证书又太麻烦,所以仅仅把已有的证书里的公钥替换为另一个就好了。证书验签一定是验不过的,但是短期又能解决问题。

使用示例: certsubpubkey 参数顺序无所谓,程序会按长度自动识别。