开放原子训练营(第一季)铜锁探密shell终端实现加密解密

开放原子训练营(第一季)铜锁探密shell终端实现加密解密

最近在 csdn 发现了这个国密活动,想着学习一下商用密码的一些原理和应用技术。在这里,我想分享一下我的学习心得。

这个活动是由开放原子开源基金会&铜锁社区共同举办,内容包含4次课程,分别是:商用密码介绍和铜锁密码库入门常用国密算法编程入门与实战实战国密证书和国密传输协议实战铜锁国密应用和结营作业说明

每一部分老师都很照顾小白,真正做到了由浅入深,不会让直播那么枯燥,让新手也能够跟上老师的步伐,在这个活动中,我主要学习了常用的国密算法,比如 SM2SM3SM4,以及如何使用铜锁密码库这个 SDK

我个人觉得在这个活动中,最让我受益的是学习了 SM4 加密算法和 SM3 杂凑算法。SM4 是一种对称加密算法,它能够在保证安全性的同时,提供高效的加解密速度。而 SM3 则是一种哈希算法,它可以将任意长度的数据转换为一个固定长度的哈希值,从而保证数据的完整性和安全性。

老师也通过代码进一步说明其加密原理,有种醍醐灌顶的感觉,代码无疑是最直接的

#include <openssl/evp.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
static int sm4_enc(const unsigned char *key, const unsigned char *iv,
 unsigned char *in, int inlen, unsigned char *out,
 int *outlen)
{
   
   
 EVP_CIPHER_CTX *ctx = 
<think>好的,用户现在想了解如何用OpenSSL实现之前提到的所有加密算法。首先,我需要回顾之前介绍的加密算法类型:对称加密(如AES、DES、ChaCha20)、非对称加密(RSA、ECC、SM2)、哈希算法(SHA-256、MD5、SM3),以及混合加密系统和国密算法。用户可能希望得到具体的命令行操作示例,可能包括生成密钥、加密解密文件、哈希生成等。 接下来,我需要考虑用户的使用场景。用户可能是开发人员、系统管理员或安全爱好者,希望利用OpenSSL进行实际的数据加密操作。他们可能需要具体的命令参数,比如如何指定密钥长度、加密模式(如CBC、GCM)、输出格式等。另外,用户可能对国密算法(SM2、SM3、SM4)特别感兴趣,因为这在中文环境中可能更常见,但OpenSSL的标准版本可能不支持国密,需要特别说明或使用支持国密的分支。 同时,需要注意用户可能的深层需求。比如,他们可能不仅想知道基本命令,还想了解如何安全地管理密钥、处理常见错误,或者如何在实际项目中组合使用这些算法(如HTTPS中的混合加密)。此外,用户可能对算法的选择有疑问,比如何时使用AES而不是ChaCha20,或者如何选择合适的哈希算法。 在准备回答时,要确保命令的正确性和安全性。例如,生成RSA密钥时需要指定足够的长度(如2048位),避免使用不安全的算法(如MD5、DES)。对于国密算法,需要指出可能需要安装特定版本的OpenSSL,如支持GM/T标准的Tongsuo(铜锁)项目。 还需要考虑不同操作系统下的兼容性,比如OpenSSL版本差异,以及如何安装必要的依赖。对于示例命令,使用通用参数,如-in和-out指定输入输出文件,使用-pass参数安全传递密码,以及如何生成随机IV和盐值。 最后,要提醒用户注意密钥管理和安全最佳实践,如避免硬编码密钥、使用强密码、定期更新密钥等。可能还需要指出OpenSSL命令行工具的一些限制,推荐在生产环境中使用更安全的库或工具,并结合其他安全措施。</think>以下是使用OpenSSL命令行工具实现常见加密算法的详细操作指南,包含对称加密、非对称加密、哈希计算以及混合加密场景的示例: --- ### 一、对称加密实战 #### 1. AES-256-CBC加密文件 ```bash # 加密(会提示输入密码) openssl enc -aes-256-cbc -salt -in plaintext.txt -out encrypted.enc # 解密 openssl enc -d -aes-256-cbc -in encrypted.enc -out decrypted.txt ``` #### 2. ChaCha20加密(需OpenSSL 1.1.0+) ```bash openssl enc -chacha20 -k mypassword -in data.bin -out encrypted.bin ``` --- ### 二、非对称加密操作 #### 1. RSA密钥生成与加密 ```bash # 生成2048位RSA私钥 openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048 # 提取公钥 openssl rsa -pubout -in private.pem -out public.pem # 使用公钥加密文件 openssl pkeyutl -encrypt -pubin -inkey public.pem -in secret.txt -out encrypted.dat # 使用私钥解密 openssl pkeyutl -decrypt -inkey private.pem -in encrypted.dat -out decrypted.txt ``` #### 2. ECC加密(椭圆曲线) ```bash # 生成ECC私钥(secp256k1曲线) openssl ecparam -genkey -name secp256k1 -out ecc_private.pem # 提取ECC公钥 openssl ec -in ecc_private.pem -pubout -out ecc_public.pem # 加密示例(需转换为SM2格式) openssl pkeyutl -derive -inkey ecc_private.pem -peerkey ecc_public.pem -out shared_key.bin ``` --- ### 三、哈希算法应用 #### 1. SHA-256文件校验 ```bash openssl dgst -sha256 -out hash.sha256 file.zip ``` #### 2. HMAC签名 ```bash openssl dgst -sha256 -hmac "mysecret" -out hmac.txt message.txt ``` --- ### 四、混合加密示例(模拟HTTPS) ```bash # 步骤1:生成随机对称密钥 openssl rand 32 > session.key # 步骤2:用RSA公钥加密会话密钥 openssl pkeyutl -encrypt -pubin -inkey public.pem -in session.key -out session.key.enc # 步骤3:用会话密钥加密数据 openssl enc -aes-256-gcm -pass file:session.key -in bigfile.zip -out encrypted.zip # 接收方解密流程: openssl pkeyutl -decrypt -inkey private.pem -in session.key.enc -out session.key openssl enc -d -aes-256-gcm -pass file:session.key -in encrypted.zip -out bigfile.zip ``` --- ### 五、国密算法实现(需支持GM/T的OpenSSL分支) ```bash # SM4加密(需安装国密版OpenSSL) openssl enc -sm4-cbc -k "password" -in data.txt -out data.sm4 # SM3哈希计算 openssl sm3 -in document.pdf -out digest.sm3 # SM2签名验证 openssl sm2 -sign -in message.txt -inkey sm2_private.pem -out signature.bin openssl sm2 -verify -in message.txt -pubin -inkey sm2_public.pem -sigfile signature.bin ``` --- ### 六、关键安全注意事项 1. **密码管理**: ```bash # 安全密码生成(生成16个随机字节) openssl rand -base64 16 ``` 2. **证书操作**: ```bash # 查看证书信息 openssl x509 -in cert.pem -text -noout ``` 3. **性能测试**: ```bash # 测试AES-256-GCM加密速度 openssl speed -evp aes-256-gcm ``` --- **重要提示**: 1. OpenSSL版本要求:建议使用1.1.1及以上版本(支持TLS 1.3和现代算法) 2. 国密算法需使用专门的分支(如铜锁Tongsuo) 3. 生产环境建议结合密钥管理系统(如AWS KMS或HashiCorp Vault)使用
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值