用OpenSSL产生一个随机填充的文件a.txt
,然后计算这个文件的SHA256摘要。等一下用OpenSSL加密产生b.txt
再对b.txt
解密产生c.txt
。计算c.txt
的SHA256摘要,应该和a.txt
的一样。
$ openssl rand -out a.txt 102400$ sha256sum a.txt2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd a.txt
接着,加密a.txt
,使用SM4算法,CTR分组模式。加密后输出文件b.txt
到当前目录下。
$ openssl enc -in a.txt -out b.txt -e -sm4-ctr -pbkdf2 -k 123123
参数-e
表示,这里要对-in
指定的文件进行加密处理。-pbkdf2
是指定使用PBKDF2函数对密码进行处理,密码是参数-k
指定的123123
。接着计算一下b.txt
的SHA256摘要。
$ sha256sum a.txt b.txt2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd a.txtc364d5dc9b1bd78e0538f854c24f0b777ed4d46cd47e0e2d4a5a101163b91220 b.txt
然后是解密,除了输入文件和输出文件需要修改之外,参数-e
换成-d
就是解密过程了,其余的参数跟加密的时候一样。
$ openssl enc -in b.txt -out c.txt -d -sm4-ctr -pbkdf2 -k 123123
看下产生的文件的SHA256摘要,可以发现a.txt
和c.txt
摘要跟原来的一样。
$ sha256sum a.txt b.txt c.txt2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd a.txtc364d5dc9b1bd78e0538f854c24f0b777ed4d46cd47e0e2d4a5a101163b91220 b.txt2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd c.txt
除了SM4算法,CTR模式,OpenSSL还可以用别的算法和模式对文件进行加密。输入openssl enc -list
可以查看能使用的算法和模式。例如还可以用-aes-128-cbc
参数来加密和解密,如下:
$ openssl enc -in a.txt -out d.txt -e -aes-128-cbc -pbkdf2 -k 123123$ openssl enc -in d.txt -out e.txt -d -aes-128-cbc -pbkdf2 -k 123123$ sha256sum a.txt b.txt c.txt d.txt e.txt2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd a.txtc364d5dc9b1bd78e0538f854c24f0b777ed4d46cd47e0e2d4a5a101163b91220 b.txt2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd c.txta959d12133acb54db9cc2825e6fad5de8761e417db05d2bc441c0f8704ff0fe6 d.txt2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd e.txt
批量加密文件的Bash脚本:
#!/bin/bashmkdir -p your_files_newfor file in your_files/*.*doFILE_NAME=`echo $file | cut -d '/' -f 2`openssl enc -in "your_files/$FILE_NAME" -out "your_files_new/$FILE_NAME" -e -sm4-ctr -pbkdf2 -k 123123done
如果觉得《利用OpenSSL 用国密SM4算法来给文件加密 解密》对你有帮助,请点赞、收藏,并留下你的观点哦!