1-C 密钥管理

源码获取:https://gitee.com/Flytortoise/Project/tree/C/

如果你有什么好的项目,欢迎私信公众号:Rocker的创意工坊

01

项目简介

设计一个密钥管理系统

功能要求:

    1)生成随机数

    2)生成最大素数

    3)生成密钥对,并使用密钥对签名和验签

    4)对数据进行加密和解密


02

项目总结

功能1:生成随机数,使用 rand()函数即可

功能2:需要用户输入阀值,降序依次判断是否为素数即可

判断素数时,仅判断到num^(1/2)即可

判断代码如下:

// 判断素数
bool judge(unsigned int num) {
    unsigned int flag = (unsigned int)sqrt((double)(num));
    int i = 0;
    for (i = 2; i < flag; i++) {
        if (num % i == 0)
            return false;
    }
    return true;
}

 

功能3:生成密钥对,并使用密钥对签名和验签

    密钥对:即非对称加密,使用算法通常为RSA,本次项目使用RSA2048

    签名是在hash值的基础上加密,即:签名=hash+RSA2048

    (hash算法使用:SHA256,作用:标识数据的唯一性)

    签名的作用:表示这段数据是本人制作的,没有被篡改

    因此签名本身没有秘密的属性,任何人都可以对其进行验证

    加签名的过程如下:(私钥仅自己拥有,所以仅自己加签)

    解签验证的过程如下:(公钥任何人都可以持有,所有别人可以验证,这段数据是否被篡改)

功能4:对数据进行加密和解密

加密使用对称密钥,该项目采用AES256 ECB


03

注意事项

1. 为何加密不使用RSA算法? 

答:可以使用公钥进行加密(这样持有私钥的人才能解开,保密性得到保证)

        但是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自动替换成了别的函数

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值