首页 > 其他分享 >OpenSSL学习(Secure Socket Layer)2023/11/13

OpenSSL学习(Secure Socket Layer)2023/11/13

时间:2023-11-13 20:46:02浏览次数:45  
标签:11 Layer Socket sm4 openssl sm2 key txt out

示例OpenSSL版本为

OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

别搞错了!搞错容易在sm2签名验签出问题

生成自签名证书

openssl req -x509 -newkey rsa:2048 -keyout mykey.pem -out mycert.pem -days 365

req: 表示进行证书请求和生成。
-x509: 表示生成自签名证书。
-newkey rsa:2048: 表示使用 RSA 算法生成一个新的私钥,长度为 2048 位。
-keyout mykey.pem: 表示将生成的私钥保存到 mykey.pem 文件中。
-out mycert.pem: 表示将生成的证书保存到 mycert.pem 文件中。
-days 365: 表示证书的有效期为 365 天

sm2加密解密

openssl ecparam -name SM2 -genkey -out sm2-key.pem
生成一个包含 SM2 密钥对的文件 'sm2-key.pem'.

echo "Hello, SM2 encryption!" > plaintext.txt
openssl pkeyutl -in plaintext.txt -out ciphertext.sm2 -inkey sm2-key.pem -encrypt//加密
openssl pkeyutl -in ciphertext.sm2 -out decrypted.txt -inkey sm2-key.pem -decrypt//解密

密钥由 SM2 私钥派生。使用 SM2 公钥对明文进行加密。加密后的结果存储在 ciphertext.sm2 文件中。
decrypted.txt 是解密后的明文文件,从而还原出原始的明文。

额外的批注:sm2由于OpenSSL傻逼版本的原因,很多指令是混淆的,而且由于签名算法不同、userid 不同、摘要算法不同等原因会出现不能验证、无法签名的一系列问题,谨慎对待。

生成私钥公钥

openssl ecparam -genkey -name SM2 -out pri.key
openssl ec -in pri.key -pubout -out pub.key

生成sm2私钥,然后从sm2私钥里面生成公钥。

签名验签

openssl pkeyutl -sign -in data -inkey pri.key -out pkeysig -rawin -digest sm3
openssl pkeyutl -verify -pubin -in data -inkey pub.key -sigfile pkeysig -rawin -digest sm3

使用 OpenSSL 中的 pkeyutl 工具进行 SM2 数字签名,使用 SM2 公钥验证数字签名.

openssl dgst -sm3 -sign pri.key -out dgstsig -sigopt distid:1234567812345678 data
openssl dgst -sm3 -verify pub.key -signature dgstsig -sigopt distid:1234567812345678 data

对数据进行 SM3 散列,然后使用 SM2 私钥对该散列值进行数字签名,并将签名输出到 dgstsig 文件中.再使用 OpenSSL 中的 openssl dgst 工具进行 SM3 摘要验证,验证 data 文件的 SM3 摘要是否与 dgstsig 中的数字签名相匹配,使用的公钥为 pub.key。签名选项中的 distid:1234567812345678 表示分布式标识的参数。

计算文件的Hash值

echo -n "Hello, SM3 hash!" | openssl dgst -sm3 -binary | xxd -p

计算字符串的Hash值。

echo -n "File content for SM3 hash" > myfile.txt
openssl dgst -sm3 -binary -out hash.sm3 myfile.txt

这将创建一个名为 myfile.txt 的文件,并将字符串 "File content for SM3 hash" 写入其中。
计算 myfile.txt 文件的 SM3 哈希值,并将结果保存在名为"hash.sm3"的文件中。

sm4加密解密

生成 SM4 密钥和 初始化向量IV
openssl rand -hex 16 > sm4-key.txt//生成密钥
openssl rand -hex 16 > sm4-iv.txt//生成初始化向量IV
字符串加密解密
echo -n "Hello, SM4 encryption!" | openssl enc -sm4-cbc -e -K $(cat sm4-key.txt) -iv $(cat sm4-iv.txt) -out encrypted.sm4
openssl enc -sm4-cbc -d -K $(cat sm4-key.txt) -iv $(cat sm4-iv.txt) -in encrypted.sm4

文件加密解密
echo -n "File content for SM4 encryption" > myfile.txt
openssl enc -sm4-cbc -e -K $(cat sm4-key.txt) -iv $(cat sm4-iv.txt) -in myfile.txt -out encrypted-file.sm4
openssl enc -sm4-cbc -d -K $(cat sm4-key.txt) -iv $(cat sm4-iv.txt) -in encrypted-file.sm4 -out decrypted-file.txt

类似sm2,在此不再赘述。

参考资料

标签:11,Layer,Socket,sm4,openssl,sm2,key,txt,out
From: https://www.cnblogs.com/kitaikuyo/p/17830107.html

相关文章

  • 每日总结11.13
    今天参加了分级测试,找到了有关自己的很多问题和薄弱之处,同时也学到了一点东西,三小时并没有写出来什么好东西,我觉得jsp不太好用,但是springboot应用的也不太熟练,还是因为自己不太熟练,除此之外,在收到题目之后我没有理清思路,以为自己没看完题目就直接做可以快点做完,结果却发现思路不明......
  • 11.8
    今天我们实现学生的前端信息,学生部分的前端代码,学生部分的后端代码在User的后端代码中register.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>学生注册</title><style>button{d......
  • 11.13测试总结
    测试中出现了一些没有见过的错误,又调试了半天,在引入mysql数据库时的一些细节问题得到了解决,对整体结构的构造更加清晰,并且学习到了一些新知识,可以在同一界面中放置不同角色的因素,然后不同的角色对应不同的元素展示,进而减少工作量,同时在此次测试中也暴露了一些问题,对项目的整体结......
  • 11.13
    今天在建民老师的自评测试中,我深刻认识到了自己的不足。之前我尝试做了上学期期末考试的试题,但仅仅用了大约4个小时的时间完成了三个表的增删改查,而且连深层的业务逻辑如审批都没有尝试。我只获得了期末考试一半左右的分数,这说明我在增删改查的练习上还有很大的不足。在今天的考试......
  • 11.13
    T1很有意思的贪心。显然只有四种情况:\(a\)为\(1/2\),\(b\)为\(1/2\)。那么为这四种情况分别记录一个\(vector\)。我们记录\(suma\)为\(a\)的总和,\(sumb\)为\(b\)的总和。那么显然我们需要让这个分配方式达到\(suma/2\)和\(sumb/2\)。考虑贪心,先将两个都卡在同......
  • 11.13每日总结
    今天完成了软件射进和人机交互的部分实验,主要进行了话题的总结,对我们的话题大学生日常消费的调查进行了总结,对照片进行了汇总并且生成了相应的图表。 ......
  • P3513 [POI2011] KON-Conspiracy
    题目描述:Byteotia的领土被占领了,国王Byteasar正在打算组织秘密抵抗运动。国王需要选一些人来进行这场运动,而这些人被分为两部分:一部分成为同谋者活动在被占领区域,另一部分是后勤组织在未被占领的领土上运转。但是这里出现了一个问题:后勤组织里的任意两人都必须是熟人,以促进合作......
  • Python_Mooc_Stu_23_11_13_String_Random
    目录一、序列 (一)序列的索引 1.索引编号 2.序列元素索引访问3.注意事项 (二)序列的切片 1.切片格式 2.切片使用 3.参数缺省 二、序列的运算和常用处理函数 (一)序列运算 1.序列相加 2.序列相乘 3.序列对象比较 4.成员资格检查 (二)常用处理函数 1.len()......
  • 11.13周一分级测试反思
    这次分级考试没有做好,一共A,B,C,D四个等级,只做到了c等级,B等级的选课的业务逻辑没有想出来,感觉还是经验不太足,现在反思一下造成这种情况的原因。先说上一周做了什么吧,上周就是发了期末试题后,回来尝试看了看,但是第一步就出错了,springboot工程崩了,在一直在找问题,大概陆陆续续找了一天,终......
  • 11.13日记
    默认情况下,Azure机器学习笔记本中提供了无服务器Spark计算。若要在笔记本中访问它,请从“计算”选择菜单的“Azure机器学习无服务器Spark”下选择“无服务器Spark计算”。笔记本UI还为无服务器Spark计算提供了Spark会话配置选项。配置Spark会话:   选择屏幕顶......