C++徒手搓国密SM算法!从青铜到王者の硬核修炼手册

C++徒手搓国密SM算法!从青铜到王者の硬核修炼手册_第1张图片

当代码遇上中国密码标准

(掏出祖传键盘)家人们谁懂啊!今天我们要用C++光膀子手撕国密四件套!不靠任何第三方库,就像用树枝钻木取火一样原始硬核!先上全家桶参数对比表(建议截图保存):

算法 杀伤力 密钥长度 核心装备 必杀技
SM2 非对称核弹 256bit 椭圆曲线方程 数字签名+密钥交换二合一
SM3 哈希冲击波 256bit 压缩函数套娃 数据粉碎成量子态
SM4 对称加特林 128bit Feistel网络 32轮位操作旋风斩
SM9 身份认证导弹 任意长度 双线性配对 用身份证号直接加密

(敲黑板)重点来了!所有算法都要自己造轮子,连大整数类都得从零打造!准备好迎接CPU燃烧的香气了吗?


SM2实战:与椭圆曲线の爱恨情仇

(展开数学卷轴)想要玩转SM2,先来征服这个妖娆的椭圆曲线方程:y² = x³ + ax + b。上代码!

// 椭圆曲线点操作(少儿不宜版)
class ECCPoint {
   
public:
    BigInt x, y;  // 自己实现256位大整数类
    bool isInfinity() const {
    return x == 0 && y == 0; }
    
    // 点加法(前方高能)
    ECCPoint operator+(const ECCPoint& other) {
   
        if(isInfinity()) return other;
        if(other.isInfinity()) return *this;
        // 此处应有20行微分几何计算
    }
};

密钥生成三连击:

  1. 私钥d:闭眼在1到n-1之间拍个随机数
  2. 公钥Q:把基准点G往死里累加d次
  3. 签名算法:把消息哈希后和私钥玩二人转

SM3榨汁机:数据の终极归宿

(举起液压机)任何文件进去都是256位渣渣!核心结构堪比九层妖塔:

// 压缩函数(CPU燃烧警告)
void SM3_Compress(uint32_t digest[8], const uint8_t block[64]) {
   
    uint32_t W[68], W1[64];
    // 消息扩展就像拉兰州拉面
    for(int i=0

你可能感兴趣的:(C++个人杂记,物联网,c++,算法,开发语言,国密算法,国密,c语言)