在Linux上使用GmSSL实践混合加解密
实验环境:Ubuntu 22.04.3 amd64
下载GmSSL
sudo apt-get update
sudo apt-get install -y cmake make gcc g++
git clone https://github.com/guanzhi/GmSSL.git
cd GmSSL
mkdir build && cd build
cmake ..
make
sudo make install
产生SM2密钥对
cd /GmSSL
mkdir build
cd ./build
gmssl sm2keygen -pass [your password for private key] -out sm2key.pem -pubout sm2pub.pem
生成16个随机数(十六进制)作为128位SM4对称密钥
gmssl rand -out sm4key.txt -outlen 16 -hex
使用SM2公钥加密SM4对称密钥
gmssl sm2encrypt -pubkey sm2pub.pem -in sm4key.txt -out sm4key.der
使用SM4对称密钥加密文件(cbc模式)
gmssl sm4_cbc -encrypt -in test.txt -key [your key] -iv [your iv] -out crytest.bin
也可以从文件中读取密钥:cat sm4key.txt > Key && gmssl sm4_cbc -encrypt -in test.txt -key $Key -iv [your iv] -out crytest3.bin
此处是将密钥文件中的内容输出作为字符串的值,进而利用字符串进行操作。
将加密后的对称密钥和加密文件传输给对方
解密对称密钥
gmssl sm2decrpt -key sm2key.pem -pass 123456 -in sm4key.der -out sm4key2.txt
使用对称密钥解密文件
cat sm4key2.txt > Key && gmssl sm4_cbc -decrypt -in crytest.bin -key $Key -iv [your iv] -out plain.txt