3.19. sample_crypto 使用说明
3.19.1. 功能概述
sample_crypto 通过
sample_cipher: 实现
对称 加解密 操作 支持
配置 加密算法,包括 AES / DES / SM4 支持
配置 密钥 长度,64 / 128 / 192 / 256 bit
sample_digest: 实现
哈希 摘要 计算 支持
配置 哈希 算法,包括 MD5 / SHA1 / SHA2 / SHA3
sample_hmac: 实现
消息 认证码 计算 支持
配置 哈希 算法,包括 MD5 / SHA1 / SHA2 / SHA3 支持
配置 任意 密钥 长度
sample_rsa: 实现
非对称 加解密 操作 支持
生成 RSA 密钥 对 支持
配置 RSA 密钥 长度,1024 / 2048 / 3072 / 4096 / 8192 bit 使用
公钥 加密,私钥 解密
3.19.1.1. 软件架构说明

3.19.1.2. 代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_crypto目录
结构
sample_crypto
├── sample_cipher
│ ├── Makefile
│ └── sample_cipher.c
├── sample_digest
│ ├── Makefile
│ └── sample_digest.c
├── sample_hmac
│ ├── Makefile
│ └── sample_hmac.c
└── sample_rsa
├── Makefile
└── sample_rsa.c
3.19.1.3. API 流程说明

3.19.2. 编译 & 部署
3.19.2.1. 编译
在 sample_crypto 各个make 命令
cd app/samples/platform_samples/sample_cryto/sample_cipher
make
详细
3.19.2.2. 部署
刷写/app/platform_samples/sample_crypto目录
3.19.3. 运行
3.19.3.1. sample_cipher 运行
sample_cipher 运行方法
直接
执行程序 ./sample_cipher -h可以获得 帮助 信息
sample_cipher 参数选项说明
Usage: sample_cipher [Options] [value]
Options:
-s <cipher name> Select Cipher Name
-k <key size> Key Size [64/128/192/256]
-h Show this help message
Available Cipher:
Cipher Name Recommend Key Size
1. aes_ecb 128/192/256-bit
2. aes_cbc 128/192/256-bit
3. aes_cfb 128/192/256-bit
4. aes_ofb 128/192/256-bit
5. aes_ctr 128/192/256-bit
6. sm4_ecb 128/-bit
7. sm4_cbc 128/-bit
8. sm4_cfb 128/-bit
9. sm4_ofb 128/-bit
10. sm4_ctr 128/-bit
11. des_ecb 64/-bit
12. des_cbc 64/-bit
13. des_ofb 64/-bit
选项:
-s <cipher name>: 选择加密算法。 -k <key size>: 设置密钥 长度。 -h: 显示帮助 信息。
各个
| 加密算法 | 64bit | 128bit | 192bit | 256bit |
|---|---|---|---|---|
| aes_ecb | × | ✔ | ✔ | ✔ |
| aes_cbc | × | ✔ | ✔ | ✔ |
| aes_cfb | × | ✔ | ✔ | ✔ |
| aes_ofb | × | ✔ | ✔ | ✔ |
| aes_ctr | × | ✔ | ✔ | ✔ |
| sm4_ecb | × | ✔ | × | × |
| sm4_cbc | × | ✔ | × | × |
| sm4_cfb | × | ✔ | × | × |
| sm4_ofb | × | ✔ | × | × |
| sm4_ctr | × | ✔ | × | × |
| des_ecb | ✔ | × | × | × |
| des_cbc | ✔ | × | × | × |
| des_ofb | ✔ | × | × | × |
sample_cipher 运行效果
以 AES 算法Test message for encryption, Cipher[aes_ecb], KeySize[256] 进行
./sample_cipher -s aes_ecb -k 256
打印信息
Encrypted text (hex): ffbc5dcf79a3e0bf45fb3f974983c3258f800e9eb65f78749710d35d9494dabc083f1481350d73fce81f5d513bb5e7da00c12f646cc2c3ae1a9604915ddad2ae
Decrypted text: Test message for encryption, Cipher[aes_ecb], KeySize[256]
可以
3.19.3.2. sample_digest 运行
sample_digest 运行方法
直接
执行程序 ./sample_digest -h可以获得 帮助 信息
sample_digest 参数选项说明
Usage: sample_digest [Options] [value]
Options:
-s <hash name> Select Hash Name
-h Show this help message
Available Hash:
1. md5
2. sha1
3. sha224
4. sha256
5. sha384
6. sha512
7. sha3-224
8. sha3-256
9. sha3-384
10. sha3-512
选项:
-s <hash name>: 选择哈希 算法。 -h: 显示帮助 信息。
sample_digest 支持
MD5
SHA1
SHA-2: SHA-224 /256 / 384 / 512
SHA-3: SHA3-224 /256 / 384 / 512
sample_digest 运行效果
以 SHA256 算法Test message for digest [sha256] 进行
./sample_digest -s sha256
打印信息
plain_text:
Test message for digest [sha256]
[sha256] hash is:
ded9cd0a4ac6e11c38ab3ceb3cff7cff5d18a3bbc37b9fc578f96b3ee63df4b4
可以ded9cd0a4ac6e11c38ab3ceb3cff7cff5d18a3bbc37b9fc578f96b3ee63df4b4
与
echo -n "Test message for digest [sha256]" | sha256sum
ded9cd0a4ac6e11c38ab3ceb3cff7cff5d18a3bbc37b9fc578f96b3ee63df4b4
可以
3.19.3.3. sample_hmac 运行
sample_hmac 运行方法
直接
执行程序 ./sample_hmac -h可以获得 帮助 信息
sample_hmac 参数选项说明
Usage: sample_hmac [Options] [value]
Options:
-s <hash name> Select hash Name
-k <key size> Key Size
-h Show this help message
选项:
-s <hash name>: 选择哈希 算法。 -k <key size>: 配置密钥 长度。 -h: 显示帮助 信息。
注意: HMAC 的
sample_hmac 支持
Available Hash:
Hash Name Recommend Key Size
1. md5 128-bits
2. sha1 160-bits
3. sha224 224-bits
4. sha256 256-bits
5. sha384 384-bits
6. sha512 512-bits
7. sha3-224 224-bits
8. sha3-256 256-bits
9. sha3-384 384-bits
10. sha3-512 512-bits
sample_hmac 运行效果
以Test message for Hmac: Hash[sha256] Key[256] 进行
./sample_hmac -s sha256 -k 256
打印信息
plain_text:
Test message for Hmac: Hash[sha256] Key[256]
Key is:
37099184641824357814880241575040
HMAC is:
8c5b046e961c4dfaea07c60293ebd36b9cea95cfba7e31c02c583a5cdb2303e2
可以8c5b046e961c4dfaea07c60293ebd36b9cea95cfba7e31c02c583a5cdb2303e2
使用 openssl 命令
注意: sample_hmac 每次
echo -n "Test message for Hmac: Hash[sha256] Key[256]" \
| openssl dgst -sha256 -hmac "37099184641824357814880241575040"
输出 8c5b046e961c4dfaea07c60293ebd36b9cea95cfba7e31c02c583a5cdb2303e2
可以
3.19.3.4. sample_rsa 运行
sample_rsa 运行方法
直接
执行程序 ./sample_cipher -h可以获得 帮助 信息
sample_rsa 参数选项说明
Usage: sample_rsa [Options] [value]
Options:
-k <key size> Key Size [1024/2048/3072/4096/8192]
-h Show this help message
选项:
-k <key size>: : 设置密钥 长度,支持 1024 / 2048 / 3072 / 4096 / 8192 -h: 显示帮助 信息。
sample_rsa 运行效果
以The test message for RSA-2048 encryption! 进行
./sample_rsa -k 2048
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA1iFUncTYJEnDxdpzcj+4ZYyj2jpu7GgE0/3Z9r91H2y54nju
GyyeLV1zAaekxpHcvbxkdqozb5sU8St2jAaj6M7413dEQstO+DNK1U4y7KTeC67g
eJ11Qmya0bpvKaWmrA8/9xi0TLJs/P0MzVMgHpZNSjn2EeKuMRT+operzJYfqvFe
VoX+9iZjzaiCSO1Ely4jP77nuMlGnrUUAfMT79WveEOO6IErxyvpic/RiBDnWmn6
IjWjFGxVsqMqDfWHKI4ceGPAESfXp6rNJ134WcJjZT6CW1cWT2UcmIHgFJTgGo+R
TggPM2yloancHxSiK1D8gcuugRspIchEKoUbrwIDAQABAoIBAQCaYKNRr4Yo+2mC
rpEG8Huv8up6viAUnpXEhMLtC3GUe120snzv6IYNrM7qhYPdiXG89SL1DpZQw10g
1rX8FBl+EiIDrb/v7AX+GXS9PkimpeJUR/sb2mGcxxIDXMciHoSAjeoO6qeqmATN
jF77dQ+2HaSRfCI1GNl/F2TRskmxD8RN6u/sX5MqvdLU5z7mV2Lzn2XsryrRyc5S
+6AfVy554IYdyOsW56uiTyXfhEDF/OFCiNIHR7nVDD4ziW71RjydEazosiFnwqWB
3igfsCll6hN5JY0ZorRxEDozB0UeP5GFfpAJ1UvnFPpunyxK8cEAk8K2y9v1TwJm
fAyMxcChAoGBAPsZ6CTvlOhKrMwRl/ZX4exS2CezDIEoNFoWYQ9MuXC5mYe3QHFJ
SL2ptv2WcMUEX7dlx278kCXQtRyqOMIqopRSxhTh62+i6PevxUokYu8hVYfeMbIq
PoSqNwmLJvs7jSxC6lwi2s+S4PU2tQyNgRnD86DMwrBXoUcs23XTyN9fAoGBANpO
xteskS4FJ82m00N3QS7S5ScuX2MbtxstmjFvPkbEkY40BabtspKtMd3Bzkfu95Ex
K8UuCPWtfM8RGPEitDWmRLjVaA3MpRuNykqProryFxpkgQvnWIYYV/R3MJPnZo2X
F/XSzj+6X9k1G58EMi+gV75V12LQL5i6d3dIHDWxAoGBAIlKw/QWDsvnsI0vfXAS
4xMsxMUID+k6i01KeS09XRM2V6yt1I1cbWpONiB3Nhdy6cbD3oRfkY0rjSssIzZ+
yz/f9jAKyojSgSCUOYHtXS60gih0o6VvlZlB3C/apqitCeZOfAd+gzcFbvyEOf+w
CwuEaVvdOQHkF+lrrF7DOkxvAoGBAMH23ltAO1ntQLlLMUgvTB4DSZEvdZcESAOA
2BB2K5oLCtyTQjZX2aLS+YxzpwlovFQnoSE3zsQiWdNM+KE/WWiVi1fCXQptuoEp
0QPAd6+Ce556j+H4skGqnXNa9zFil07UYXiLza73tDO0KQ93VfPU/kDh2lY0bSXA
/2ZfDplxAoGAYVURUd4GqYuGo1xJ4GQc5vNgM1BVMlGLtFIE0S7IcuqjDoQrNArz
giOZQm0IdFS6Na9HcZJuQE2TZEXrFgPbRP7k5Ewih2LrallTO2To+Tua4gGNmRvE
0EupPJH3VxTTKbP0Qha/Y9g9NFQk0FR0f6AWnzMGvgzYsfj88lXujes=
-----END RSA PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1iFUncTYJEnDxdpzcj+4
ZYyj2jpu7GgE0/3Z9r91H2y54njuGyyeLV1zAaekxpHcvbxkdqozb5sU8St2jAaj
6M7413dEQstO+DNK1U4y7KTeC67geJ11Qmya0bpvKaWmrA8/9xi0TLJs/P0MzVMg
HpZNSjn2EeKuMRT+operzJYfqvFeVoX+9iZjzaiCSO1Ely4jP77nuMlGnrUUAfMT
79WveEOO6IErxyvpic/RiBDnWmn6IjWjFGxVsqMqDfWHKI4ceGPAESfXp6rNJ134
WcJjZT6CW1cWT2UcmIHgFJTgGo+RTggPM2yloancHxSiK1D8gcuugRspIchEKoUb
rwIDAQAB
-----END PUBLIC KEY-----
Encrypted text:
0c2f5795bfab85e0cccc32f729ab6050a079212eb260b88257bbbaaf3528804f69e657d132380edcf4dc28ee683ba41013b6a0404afdba4268c3bf9784c27567cd2f03ac6f2f92ac7663680fc405cc4e60aacc35b9ec33ef02fa0d10a9b28c4b2214a78807a2f234fd764d153e82eddf42fea42799e6632f7cda8678f6e288c1e711b7d94ea092736d8fdfd2b8b771ad8f8a9567
Decrypted text: The test message for RSA-2048 encryption!
可以
3.19.4. 常见问题
3.19.4.1. HMAC 使用不同密钥长度有哪些差异
HMAC 的
密钥
长度 小于 哈希 函数 分组 长度:例如 使用 SHA-256 和 密钥 长度512,则 算法 内部 需要 在 密钥 末尾 填充 零,使 其 达到 分组 长度。 密钥
长度 大于 哈希 函数 分组 长度:例如 使用 SHA-256 和 密钥 长度128,则 算法 内部 需要 对 密钥 进行 哈希 运算,将 哈希 结果 作为 实际 使用 的 密钥。
一般