基于OpenSSL的一些常用加密签名算法

目前包括:MD5、SHA512、DES、RSA加解密、RSA+MD5签名验证算法,在openssl基础上再进行封装,使用简单,头文件需要包含openssl库,可以使用vcpkg自动管理,省去繁琐的配置工程的过程。

该RSA签名算法中,已将输入明文做了MD5处理。

注意RSA加密算法E,解密算法D,与RSA签名算法S,验证算法V,这里的EDSV互补相等,不要认为加密过程的E使用公钥,验证过程的V也使用公钥,就把两者混为一谈。

 

一看头文件就显得容易使用了

class COpenSSL
{
public:
	COpenSSL();
	~COpenSSL();

	// ---- md5摘要哈希 ---- // 
	void md5(const std::string &srcStr, std::string &encodedHexStr);

	// ---- sha256摘要哈希 ---- //  
	void sha256(const std::string &srcStr, std::string &encodedHexStr);

	// ---- des对称加解密 ---- //    
	// 加密 ecb模式    
	std::string des_encrypt(const std::string &clearText, const std::string &key);
	// 解密 ecb模式    
	std::string des_decrypt(const std::string &cipherText, const std::string &key);

	// 函数方法生成密钥对   
	void generateRSAKey(std::string strKey[2]);

	// 命令行方法生成公私钥对(begin public key/ begin private key)  
	// 找到openssl命令行工具,运行以下  
	// openssl genrsa -out prikey.pem 1024   
	// openssl rsa - in privkey.pem - pubout - out pubkey.pem  

	// 公钥加密    
	std::string rsa_pub_encrypt(const std::string &clearText, const std::string &pubKey);
	// 私钥解密    
	std::string rsa_pri_decrypt(const std::string &cipherText, const std::string &priKey);

	//私钥签名
	std::string signMessage(std::string privateKey, std::string plainText);
	//公钥验证
	bool verifySignature(std::string &publicKey, std::string &plainText, std::string &signatureBase64);

 

项目文件:https://gitee.com/feistel/some_openssl

 

转载于:https://my.oschina.net/feistel/blog/2249968

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenSSL是一个强大的密码,包含了各种加密算法和工具,其中包括数字签名。 数字签名是一种用于验证消息真实性和完整性的技术。数字签名基于公钥加密和私钥解密的原理,通过对消息进行哈希运算,然后使用私钥对哈希值进行加密,生成数字签名。接收方使用公钥对数字签名进行解密,然后对接收到的消息进行哈希运算,并将哈希值与数字签名进行比较,从而验证消息的真实性和完整性。 使用OpenSSL实现数字签名的过程如下: 1. 生成公钥和私钥 使用OpenSSL生成RSA公钥和私钥对,其中私钥用于对消息进行签名,公钥用于验证签名。生成RSA公钥和私钥对的命令如下: ``` openssl genrsa -out private_key.pem 2048 openssl rsa -in private_key.pem -pubout -out public_key.pem ``` 2. 对消息进行哈希运算 使用OpenSSL对要签名的消息进行哈希运算,通常使用SHA1或SHA256算法进行哈希运算。以SHA256算法为例,对消息进行哈希运算的命令如下: ``` echo "message to be signed" | openssl dgst -sha256 > message.sha256 ``` 3. 使用私钥对哈希值进行加密,生成数字签名 使用OpenSSL使用私钥对哈希值进行加密,生成数字签名。生成数字签名的命令如下: ``` openssl rsautl -sign -inkey private_key.pem -in message.sha256 -out signature.sha256 ``` 4. 使用公钥对数字签名进行解密,验证签名 接收方使用OpenSSL使用公钥对数字签名进行解密,然后对接收到的消息进行哈希运算,并将哈希值与数字签名进行比较,从而验证签名。验证签名的命令如下: ``` openssl rsautl -verify -inkey public_key.pem -in signature.sha256 -pubin -in message.sha256 ``` 如果数字签名验证成功,则表示消息的真实性和完整性得到了保证。 需要注意的是,在使用OpenSSL进行数字签名时,需要保护私钥的安全性,避免私钥被泄露,从而导致数字签名被篡改。同时,需要保证公钥的准确性,避免使用错误的公钥验证数字签名

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值