利用OpenSSL,用国密SM4算法来给文件加密、解密
用OpenSSL产生一个随机填充的文件 a.txt
,然后计算这个文件的SHA256摘要。等一下用OpenSSL加密产生 b.txt
再对 b.txt
解密产生c.txt
。计算 c.txt
的SHA256摘要,应该和 a.txt
的一样。
$ openssl rand -out a.txt 102400
$ sha256sum a.txt
2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd 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.txt
2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd a.txt
c364d5dc9b1bd78e0538f854c24f0b777ed4d46cd47e0e2d4a5a101163b91220 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.txt
2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd a.txt
c364d5dc9b1bd78e0538f854c24f0b777ed4d46cd47e0e2d4a5a101163b91220 b.txt
2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd 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.txt
2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd a.txt
c364d5dc9b1bd78e0538f854c24f0b777ed4d46cd47e0e2d4a5a101163b91220 b.txt
2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd c.txt
a959d12133acb54db9cc2825e6fad5de8761e417db05d2bc441c0f8704ff0fe6 d.txt
2aa2b3258c026866bfbd548549594fa47aa274257bb322f4e6411c4b0442d4bd e.txt
批量加密文件的Bash脚本:
#!/bin/bashmkdir -p your_files_new
for 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 123123
done
利用OpenSSL,用国密SM4算法来给文件加密、解密相关推荐
- java break 在if 中使用_java中使用国密SM4算法详解
前言 上次总结了一下加密算法的分类(加密算法有集中形式,各有什么不同?),现在我们用java语言实现一下SM4:无线局域网标准的分组数据算法.对称加密,密钥长度和分组长度均为128位. ps:我们既可 ...
- java mac pos_pos终端mac国密(sm4)算法(java实现)
概念理解 mac算法是(Message Authentication Codes 消息认证码算法),是含有密钥散列函数算法.主要通过异或运算,再配合其他加密算法实现mac值的运算,用于校验. 实现过程 ...
- 国密算法java语言的实现:利用bcprov和hutool库分别实现国密SM4算法工具类,对称密钥
SM4算法成为行业标准: SM4分组密码算法是2012年3月21日实施的一项行业标准: 2021年6月25日,我国SM4分组密码算法作为国际标准ISO/IEC 18033-3:2010/AMD1:20 ...
- 国密SM4算法(简介与C源码)
国密即国家密码局认定的国产密码算法,即商用密码. 国密算法是国家密码局制定标准的一系列算法.其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法.具体包括SM1,SM2,SM3,SM4等,其中:S ...
- C#实现SM2国密签名签验签和加密解密
java版本已放出 对应的java版本 话不多说,上码. 依赖,BouncyCastle.Crypto.dll ,经测试,可与java版本的bcprov-jdk15on-1.62.jar互通. 在这里 ...
- 国密SM4对称算法实现说明(原SMS4无线局域网算法标准)
国密SM4对称算法实现说明(原SMS4无线局域网算法标准) SM4分组密码算法,原名SMS4,国家密码管理局于2012年3月21日发布:http://www.oscca.gov.cn/News/201 ...
- 基于国密SM3算法(openssl接口)密钥派生函数KDF的实现
前言 最近项目需要使用KDF生成秘钥,对比国密标准(GB_T 32918.4-2016)及网络资料,发现确实没有让我满意的, 自己结合标准和大佬:Heidlyn的帖子<国密SM2算法密钥派生函数 ...
- 国密SM4,layui前端 和.net core后台 加密解密 .net加密解密
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.本文做用?? 二.SM4介绍 三.使用步骤 1.前台实现加密 2.后台实现解密 四 总结 前言 第一次分享,我是个 ...
- C#.NET 国密SM4加密解密 CBC ECB 2种模式
注意点: 1.加密时,明文转 byte[] 时,不要用 Encoding.Default,一定要指定编码,如:UTF-8. 解密时,解出的 byte[] 转 string 同样要指定相同的编码. 2. ...
最新文章
- 独家 | 人工智能先锋人物杰夫·辛顿说:“深度学习将无所不能”
- Vivado中Block Memory Generator v8.3的使用
- 零基础建站第一季视频分享
- 腾讯招.NET要求以下几点,你准备好了吗?
- 三级联动(ajax)
- 单片机外部RAM如何用C 语言访问,C51中访问外部RAM的方法
- 硬件/操作系统/网络(九):了解常见linux服务器硬件配置
- ue4导入倾斜摄影_倾斜摄影如何和bim结合?倾斜摄影数据怎么导?我来告诉你!...
- 【Java-语言入门】开发 迷你图书管理器
- 已解决_mssql.MSSQLDatabaseException: (2627, b“Violation of PRIMARY KEY constraint ‘PK__TM_DATA___7BDCF2
- BZOJ4833: [Lydsy1704月赛]最小公倍佩尔数
- 【ICPC模板】卡迈克尔函数
- Windows下Java下载与安装,Java第一个程序
- Lotti引发的java.lang.StackOverflowError
- Ubuntu-C语言下的应用
- Freeline使用攻略
- 单片机和ARM A的区别
- 刚学c++window编程没多久写了一个整人小软件有些bug
- 【雷锋网】网友亲历诈骗!安全专家详解:一个验证码如何让你倾家荡产
- Trackingnet Ubantu 解压 / linux.zip.001, linux.zip.002, linux.zip.003文件解压方法