资源简介
SM4分组密码算法是一个迭代分组密码算法,由加解密算法和密钥扩展算法组成。SM4分组密码算法采用非平衡Feistel结构,分组长度为128b密钥长度为128b。加密算法与密钥扩展算法均采用非线性迭代结构。加密运算和解密运算的算法结构相同,解密运算的轮密钥的使用顺序与加密运算相反。

代码片段和文件信息
#include
#include
#ifndef XYSSL_SM4_H
#define XYSSL_SM4_H
#define SM4_ENCRYPT 1
#define SM4_DECRYPT 0
/**
* \brief SM4 context structure
*/
typedef struct{
int mode; /*!< encrypt/decrypt */
unsigned long sk[32]; /*!< SM4 subkeys */
}sm4_context;
#ifdef __cplusplus
extern “C“ {
#endif
/**
* \brief SM4 key schedule (128-bit encryption)
*
* \param ctx SM4 context to be initialized
* \param key 16-byte secret key
*/
void sm4_setkey_enc( sm4_context *ctx unsigned char key[16] );
/**
* \brief SM4 key schedule (128-bit decryption)
*
* \param ctx SM4 context to be initialized
* \param key 16-byte secret key
*/
void sm4_setkey_dec( sm4_context *ctx unsigned char key[16] );
/**
* \brief SM4-ECB block encryption/decryption
* \param ctx SM4 context
* \param mode SM4_ENCRYPT or SM4_DECRYPT
* \param length length of the input data
* \param input input block
* \param output output block
*/
void sm4_crypt_ecb( sm4_context *ctx
int mode int length unsigned char *input unsigned char *output);
#ifdef __cplusplus
}
#endif
#endif
/*
* 32-bit integer manipulation macros (big endian)
*/
#ifndef GET_ULONG_BE
#define GET_ULONG_BE(nbi) \
{ \
(n) = ( (unsigned long) (b)[(i) ] << 24 ) \
| ( (unsigned long) (b)[(i) + 1] << 16 ) \
| ( (unsigned long) (b)[(i) + 2] << 8 ) \
| ( (unsigned long) (b)[(i) + 3] ); \
}
#endif
#ifndef PUT_ULONG_BE
#define PUT_ULONG_BE(nbi) \
{ \
(b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
(b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
(b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
(b)[(i) + 3] = (unsigned char) ( (n) ); \
}
#endif
/*
*rotate shift left marco definition
*
*/
#define SHL(xn) (((x) & 0xFFFFFFFF) << n)
#define ROTL(xn) (SHL((x)n) | ((x) >> (32 - n)))
#define SWAP(ab) { unsigned long t = a; a = b; b = t; t = 0; }
/*
* Expanded SM4 S-boxes
/* Sbox table: 8bits input convert to 8 bits output*/
static const unsigned char SboxTable[16][16] =
{
{0xd60x900xe90xfe0xcc0xe10x3d0xb70x160xb60x140xc20x280xfb0x2c0x05}
{0x2b0x670x9a0x760x2a0xbe0x040xc30xaa0x440x130x260x490x860x060x99}
{0x9c0x420x500xf40x910xef0x980x7a0x330x540x0b0x430xed0xcf0xac0x62}
{0xe40xb30x1c0xa90xc90x080xe80x950x800xdf0x940xfa0x750x8f0x3f0xa6}
{0x470x070xa70xfc0xf30x730x170xba0x830x590x3c0x190xe60x850x4f0xa8}
{0x680x6b0x810xb20x710x640xda0x8b0xf80xeb0x0f0x4b0x700x560x9d0x35}
{0x1e0x240x0e0x5e0x63
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9467 2018-06-07 13:29 SM4.c
- 上一篇:SHA-1算法实现源代码
- 下一篇:基于哈夫曼编码的文件压缩解压程序的C语言实现
相关资源
- 3des加密算法C语言实现
- 国密SM4加密_2020
- 基于图割的图像分割OpenCV+MFC实现
- MFC实现的红绿灯程序
- SM4(ECB、CBC、CTR、CFB、OFB)加密算法
- 页面置换算法用MFC实现了
- MFC实现画板
- 用MFC实现的简单qq聊天
- MFC实现简易画图程序
- SNL语言编译器GUI VC++ 2008版 MFC实现可
- MFC实现可编辑Excel文件
- 超市库存管理系统的MFC实现
- 使用MFC实现真实感图形绘制
- MFC实现简单计算器支持加减乘除和括
- 一元二次方程求解MFC实现
- 迷宫MFC实现最短路径,有简单界面迷
- 二叉树 VC6.0 MFC实现 数据结构
- 用MFC实现的图像处理源代码总集
- 图像边缘提取经典算法MFC实现
- MFC实现dem的读取与现实
- MFC实现RSA算法
- tcp客户端程序之mfc实现
- TSP 蚁群算法 MFC实现
- VC实现虚拟打印机的框架源代码
- MFC实现多任务多线程软件
- FTP客户端VC实现
- 用c++编写的打气球的游戏,用MFC实现
- MFC实现高仿画板、绘图软件功能带详
- 冒泡排序MFC实现
- [毕业分享] MFC实现数字图像处理软件
评论
共有 条评论