?? aes_lib.h
字號:
/*C*****************************************************************************
* NAME: AES_Lib.h
*-------------------------------------------------------------------------------
* Copyright (c) 杭州家和智能控制有限公司.
*-------------------------------------------------------------------------------
* RELEASE: 蘇琦 suqiniat@163.com
* REVISION: V1.0版
*-------------------------------------------------------------------------------
* PURPOSE:
* AES(Advanced Encryption Standard)加密算法
*
* NOTES: 僅支持128位加密標準
*******************************************************************************/
#ifndef AES_LIB_H
#define AES_LIB_H
/*_____ I N C L U D E S ______________________________________________________*/
#include <string.h>
/*_____ M A C R O S __________________________________________________________*/
//可移植的數(shù)據(jù)類型,方便程序的移植
typedef unsigned char AES_U8;
typedef unsigned int AES_U16;
//存儲在Flash中的存儲類型定義(沒有必要則用空格代替)
#define CODE_MEM_TYP code
//僅支持128位加密標準
#define Nc (4) // state數(shù)組和擴展密鑰的列數(shù)
#define Nr (10) // 加密輪數(shù)
/*_____ D E F I N I T I O N __________________________________________________*/
/*_____ D E C L A R A T I O N ________________________________________________*/
void AES_ExpandKey(AES_U8 *key, AES_U8 *expKey); //擴展密鑰加操作,相當于初始化AES算法
void AES_Encrypt(AES_U8 *in, AES_U8 *expKey, AES_U8 *out); //128位加密函數(shù)
void AES_Decrypt(AES_U8 *in, AES_U8 *expKey, AES_U8 *out); //128位解密函數(shù)
/******************************************************************************
使用范例
#include <stdio.h>
#include "AES_Lib.h"
AES_U8 in[16] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77, //輸入16字節(jié)(128位)明文
0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff};
AES_U8 key[16] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, //輸入16字節(jié)(128位)密鑰
0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
AES_U8 out[16]; //定義一個存入16個元素(128位)的數(shù)組,供密文輸出
void main (void) //程序從此處開始運行
{
AES_U8 expKey[4 * Nc * (Nr + 1)]; //定義一個放擴展密鑰的數(shù)組,含有4*4*(10+1)個元素
AES_U16 idx; //定義一個本地整型變量,作為數(shù)組索引
AES_ExpandKey (key, expKey); //密鑰的擴展(算法的初始化)
AES_Encrypt (in, expKey, out); //對in明文數(shù)組進行加密,并通過out數(shù)組輸出
for (idx=0; idx<16; idx++) //通過out數(shù)組輸出密文
{
printf ("%.2x ", out[idx]);
}
printf ("\n"); //回車符
AES_Decrypt (out, expKey, in); //對out密文進行解密,并通過in數(shù)組輸出
for (idx=0; idx<16; idx++) //通過in數(shù)組將解密后的明文輸出
{
printf ("%.2x ", in[idx]);
}
printf ("\n"); //回車符
}
******************************************************************************/
#endif /*AES_LIB_H*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -