博客
关于我
SM9-加解密
阅读量:708 次
发布时间:2019-03-17

本文共 1652 字,大约阅读时间需要 5 分钟。

SM9加密算法实现

算法过程

SM9加密算法是一种基于BN曲线的椭圆曲线加密算法,主要包括以下几个步骤:

  • 128字节到ECN2的转换:将128字节的输入数据转换为ECN2格式,ECN2是椭圆曲线点的加密表示。

  • ECN2点的打印:将ECN2点的坐标信息转换为字节形式并输出。

  • 字符链接:将不同类型的字符(如字节和ECN2点)进行链接,生成最终的输出结果。

  • 点测试:验证给定的点是否在SM9曲线上。

  • SM4块加密:对消息进行块加密,使用SM4算法进行加密操作。

  • SM4块解密:对加密后的消息进行解密,恢复原始消息。

  • SM9 H1函数:实现SM9标准中的H1函数,用于生成加密密钥。

  • SM9 MAC计算:计算SM9的消息认证码(MAC),用于数据完整性验证。

  • SM9初始化:初始化SM9曲线的基本参数,包括曲线方程和基点。

  • SM9加密密钥生成:生成加密过程所需的公钥和私钥。

  • SM9加密过程:基于SM9标准对消息进行加密操作,包含密钥派生、非对称加密和认证码计算等步骤。

  • 程序实现

    下面是SM9加密算法的实现代码,主要包含以下功能:

    #include "SM9_enc_dec.h"#include "kdf.h"#include "SM4.h"#define BNLEN 16#define SM3_len 64typedef struct {    big a, b;} zzn12;typedef struct {    zzn12 x, y;    big z.a, z.b;    enum { MR_EPOINT_INFINITY, MR_EPOINT_NORMAL } marker;} ecn2;typedef struct {    unsigned char data[BNLEN];} big;typedef struct {    unsigned char char_data[BNLEN];} big_to_bytes_t;// ... 其他结构体和函数定义/** * @brief 将128字节的输入转换为ECN2点 * @param Ppubs 输入128字节的数据 * @param res 输出的ECN2点 * @return 是否成功 */BOOL bytes128_to_ecn2(unsigned char Ppubs[], ecn2 *res) {    zzn2 x, y;    big a, b;    ecn2 r;    // ... 初始化ECN2点    return ecn2_set(&x, &y, res);}/** * @brief 打印ECN2点的字节表示 * @param x ECN2点 * @return void */void ecn2_Bytes128_Print(ecn2 x) {    // ... 输出ECN2点的坐标}/** * @brief 链接字符 * @param message 输入的消息 * @param len 消息长度 * @param w zzn12元素 * @param Z 输出的字符数组 * @param Zlen 输出数组的长度 * @return void */void LinkCharZzn12(unsigned char *message, int len, zzn12 w, unsigned char *Z, int Zlen) {    // ... 将字符数组Z生成最终输出}// ... 其他函数定义/** * @brief 测试点是否在SM9曲线上 * @param point 要测试的点 * @return 0: 成功 1: 不在曲线上 */int Test_Point(epoint *point) {    // ... 实现SM9曲线的点测试}// ... 其他函数实现

    参考文献

  • 国标—SM9-加解密
  • 密码学-基础理论与应用(李子臣著)
  • 商用密码检测中心-源码下载
  • 转载地址:http://yovez.baihongyu.com/

    你可能感兴趣的文章
    OAuth2授权码模式详细流程(一)——站在OAuth2设计者的角度来理解code
    查看>>
    OAuth2:项目演示-模拟微信授权登录京东
    查看>>
    OA系统多少钱?OA办公系统中的价格选型
    查看>>
    OA系统选型:选择好的工作流引擎
    查看>>
    OA让企业业务流程管理科学有“据”
    查看>>
    OA项目之我的会议(会议排座&送审)
    查看>>
    OA项目之我的会议(查询)
    查看>>
    Object c将一个double值转换为时间格式
    查看>>
    object detection之Win10配置
    查看>>
    object detection训练自己数据
    查看>>
    object detection错误Message type "object_detection.protos.SsdFeatureExtractor" has no field named "bat
    查看>>
    object detection错误之Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
    查看>>
    object detection错误之no module named nets
    查看>>
    Object of type 'ndarray' is not JSON serializable
    查看>>
    Object Oriented Programming in JavaScript
    查看>>
    object references an unsaved transient instance - save the transient instance before flushing
    查看>>
    Object.keys()的详解和用法
    查看>>
    OBJECTIVE C (XCODE) 绘图功能简介(转载)
    查看>>
    Objective-C ---JSON 解析 和 KVC
    查看>>
    Objective-C 编码规范
    查看>>