获取源代码: https://gitee.com/fly tortoise/project/tree/c /
如果有什么好项目,欢迎来到私人信件公众号: Rocker创意工作室
01
项目简介
设计密钥管理系统
功能要求:
1 )生成随机数
2 )生成最大素数
3 )生成密钥对,利用密钥对进行签名和验证
4 )数据加密和解密
02
项目总结
功能1:生成随机数,使用 rand()函数即可
功能2:需要用户输入阀值,降序依次判断是否为素数即可
判断素数时,只能判断到num^(1/2)
判断代码如下。
//素数bool judge (统一内建)统一内建=(统一内建) sqrt () (双精度) ) num ) ); int i=0; for(I=2; I标志; I ) if(num%I==0)返回假; }返回真; }
功能3:生成密钥对,并使用密钥对签名和验签
密钥对:在非对称加密中,使用算法的通常是RSA,这次项目使用RSA2048
签名根据hash值加密。 即签名=hash RSA2048
(混列算法使用) SHA256 (角色)标识数据的唯一性)
签名作用:表示此数据由本人创建,未被篡改
因此,签名本身没有秘密属性,任何人都可以验证它
签名的流程如下。 (私钥只有自己有,所以只有自己签名。)。
解除签名并验证的流程如下。 (任何人都可以拥有公钥,所有人都可以验证,此数据是否未被篡改。)。
功能4:对数据进行加密和解密
加密使用对称密钥,该项目采用AES256 ECB
03
注意事项
1. 为何加密不使用RSA算法?
a )可以使用公钥进行加密(这样可以解开拥有私钥的人,保证了机密性)。
但是RSA算法的速度比AES慢
2. RSA2048,SHA256,AES256,其中 2048,256指的是位,不是字节
3. RSA 公钥解签后,hash1的长度为256字节
对数据SHA256之后,hash2的长度为32字节
只需要对比前32个字节即可
04
经验教训
问题:
如果使用PEM_read_RSAPrivateKey,则返回值不是NULL,但会发生段错误
原因:
由于没有使用头文件#include openssl/pem.h,gcc已自动替换为其他函数