基于C语言实现的aes256加密算法示例

  

本文实例讲述了基于C语言实现的aes256加密算法。分享给大家供大家参考,具体如下:

  

<强> aes256.h:

        的ifndef uint8_t   #定义uint8_t unsigned char   # endif   # ifdef __cplusplus   外来的“C”{   # endif   typedef struct {   uint8_t关键[32];   uint8_t enckey [32];   uint8_t deckey [32];   }aes256_context;   空白aes256_init (aes256_context *、uint8_t *);   空白aes256_done (aes256_context *);   空白aes256_encrypt_ecb (aes256_context *、uint8_t *);   空白aes256_decrypt_ecb (aes256_context *、uint8_t *);   # ifdef __cplusplus   }   # endif      之前      

<强> aes256.c:

        # include“aes256.h”   #定义F (x) (((x) & lt; & lt; 1) ^ (((, (x)比的在7),1)* 0 x1b))   #定义FD (x) (((x)在祝辞1)^ (((x),1)& # 63;0 x8d: 0)//#定义BACK_TO_TABLES   # ifdef BACK_TO_TABLES   const uint8_t sbox [256]={   0 x63, 0 x7c 0 x77 0 x7b, 0 xf2 0 x6b 0 x6f 0 xc5,   0 x30 0 x01 0 x67 0 x2b,以0 xfe, 0 xd7 0 xab 0 x76,   0 xca, 0 x82 0 xc9 0 x7d, 0 xfa 0 x59 0开发,x47 0 xf0,   0 xad 0 xd4 0 xa2 0 xaf 0 x9c 0 xa4 0 x72 0 xc0,   0 xb7, 0 xfd 0 x93 0 x26, 0 x36 0 x3f 0 xf7 0 xcc,   0 x34, 0 xa5 0 xe5 0 xf1, 0 x71 0 xd8 0 x31, 0连接,   0 x04, 0 xc7 0 x23 0 xc3, 0 x18 0 x96, 0 x05 0 x9a,   0 x07, 0 x12、0 x80 0 xe2 0 xeb 0 x27 0 xb2 0 x75,   0 x09, 0 x83 0 x2c 0 x1a, 0 x1b 0 x6e 0 x5a 0 xa0,   0 x52, 0 x3b 0 xd6 0 xb3, 0 x29 0 xe3 0 x2f 0 x84,   0 x53, 0 xd1 0 x00 0中,0 x20, 0 xfc 0 xb1 0 x5b,   0 x6a, 0 xcb 0 xbe 0 x39, 0 x4a 0 x4c 0 x58 0 xcf,   0 xd0, 0 xef 0 xaa 0 xfb, 0 x43 0 x4d 0 x33 0 x85,   0 x45, 0 xf9 0 x02 0 x7f, 0×50 0 x3c 0 x9f 0 xa8,   0 x51 0 xa3 0 x40 0 x8f, 0 x92 0 x9d 0 x38 0 xf5,   0 xbc, 0 xb6 0 xda 0 x21, 0 x10, 0 xff, 0 xf3 0 xd2,   0 xcd 0 x0c 0 * 13,0 xec, 0 x5f 0 x97 0 x44 0 x17,   0 xc4, 0 xa7 0 x7e 0 x3d, 0 x64 0 x5d 0 x19 0 x73,   0 x60, 0 x81 0 x4f 0 xdc, 0将0 x2a 0 x90 0 x88,   0 x46 0 xee 0 xb8, 0 x14, 0 xde, 0 x5e 0 x0b 0 xdb,   0 xe0, 0 x32 0 x3a 0 x0a, 0 x49 0 x06 0 x24 0 x5c,   0 xc2, 0 xd3 0 xac 0 x62, 0 x91 0 x95 0 xe4 0 x79,   0 xe7, 0 xc8 0 x37 0 x6d, 0 x8d 0 xd5 0 x4e 0 xa9,   0 x6c, 0 x56 0 xf4 0 xea、0 x65 0 x7a 0机加区,(,   0 xba 0 x78 0 25,,表示就是0 x2e 0 x1c 0 xa6 0 xb4 0 . xc6,   0 xe8, 0 xdd 0 x74 0 x1f, 0 x4b 0 xbd 0 x8b 0 x8a,   0 x70、0 x3e 0 xb5 0 x66, 0 x48 0 x03, 0 xf6 0 x0e,   0 x61, 0 x35 0 x57 0 xb9, 0 x86, 0 xc1之前,0 x1d 0 x9e,   0 xe1, 0 xf8 0 x98 0 x11, 0 x69 0 xd9 0 x8e, 0 x94,   0 x9b, 0 x1e 0 x87 0 xe9, 0 xce 0 x55 0 x28 0 xdf,   0 0 x8c,最后0 x89 0 x0d, 0, 0 xe6 0×, 0 x68,   0 x41 0 x99 0 x2d, 0 x0f, 0 xb0 0 x54 0 xbb 0 x16时   };   const uint8_t sboxinv [256]={   0 x52, 0 x09 0 x6a 0 xd5, 0 x30 0 x36 0 xa5 0 x38,   0,0 x40 0 xa3 0 x9e, 0 x81 0 xf3 0 xd7 0 xfb,   0 x7c, 0 xe3 0 x39 0 x82, 0 x9b 0 x2f 0 xff, 0 x87,   0 x34 0 x8e 0 x43, 0 x44 0 xc4 0 xde, 0 xe9 0 xcb,   0 x54 0 x7b, 0 x94, 0 x32 0 xa6 0 xc2 0 x23 0 x3d,   0 xee 0 x4c 0 x95, 0 x0b 0×, 0 xfa 0 xc3 0 x4e,   (,,表示就是0 x2e 0最后0 x66 0 x28 0 xd9 0 x24 0 xb2,   0 x76 0 x5b 0 xa2 0 x49 0 x6d 0 x8b 0 xd1 0 25,   0 x72, 0 xf8 0 xf6 0 x64, 0 x86, 0 x68 0 x98 0 x16,   0 xd4, 0 xa4 0 x5c 0 xcc, 0 x5d 0 x65 0 xb6 0 x92,   0 x6c, 0 x70、0 x48 0×50 0 xfd 0中,0 xb9 0 xda,   0 x5e, 0 x15 0 x46 0 x57, 0 xa7 0 x8d 0 x9d 0 x84,   0 x90, 0 xd8 0 xab 0 x00, 0 x8c 0 xbc 0 xd3 0 x0a,   0 xf7, 0 xe4 0 x58 0 x05, 0 xb8 0 xb3 0 x45 0 x06,   0 xd0, 0 x2c 0 x1e 0 x8f, 0 xca 0 x3f 0 x0f, 0 x02,   xbd xaf 0 xc1之前,0,0,0 x03, 0 x01, 0 * 13, 0 x8a 0 x6b,   0 x3a 0 x91 0 x11, 0 x41 0 x4f 0 x67 0 xdc 0 xea,   0 x97, 0 xf2 0 xcf 0 xce, 0 xf0 0 xb4 0 xe6 0 x73,   0 x96 0 xac 0 x74, 0将0 xe7 0 xad 0 x35 0 x85,   0 xe2 0 xf9 0 x37, 0 xe8 0 x1c 0 x75 0 xdf 0 x6e,   0开发,x47 0 xf1 0 x1a 0 x71, 0 x1d 0 x29 0 xc5 0 x89,   0 x6f, 0 xb7 0 x62 0 x0e, 0 xaa 0 x18 0 xbe 0 x1b,   0 xfc, 0 x56 0 x3e 0 x4b, 0 . xc6 0 xd2 0 x79 0 x20,   0 x9a 0 xdb 0 xc0,以0 xfe, 0 x78 0 xcd 0 x5a 0 xf4,   0 x1f, 0 xdd 0 xa8 0 x33, 0 x88 0 x07 0 xc7 0 x31,   0 xb1 0 x12 0 x10, 0 x59 0 x27 0 x80 0 xec 0 x5f,   0 x60 0 x51 0 x7f 0 xa9, 0 x19 0 xb5 0 x4a 0 x0d,   0 x2d, 0 xe5 0 x7a 0 x9f, 0 x93 0 xc9 0 x9c 0 xef,   0 xa0, 0 xe0 0 x3b 0 x4d, 0机加区,0 x2a 0 xf5 0 xb0,   0 xc8, 0 xeb 0 xbb 0 x3c, 0 x83 0 x53 0 x99 0 x61,   0 x17, 0 x2b 0 x04 0 x7e, 0 xba 0 x77 0 xd6 0 x26,   0 xe1 0 x69 0 x14, 0 x63 0 x55 0 x21 x7d 0 x0c, 0   };   #定义rj_sbox (x) sbox ((x))   #定义rj_sbox_inv (x) sboxinv ((x))   其他#   uint8_t gf_alog (uint8_t x)//计算反对数创3   {   uint8_t作为=1,z;   而(x)) {z=作为;作为& lt; & lt;=1;如果(z,0 x80)作为^=0 x1b;作为^=z;}   返回作为;   }   uint8_t gf_log (uint8_t x)//计算对数创3   {   uint8_t作为=1,i=0, z;   {做   如果(作为==x)休息;   z=作为;作为& lt; & lt;=1;如果(z,0 x80)作为^=0 x1b;作为^=z;   },(+ +我的在0);   返回我;   }   uint8_t gf_mulinv (uint8_t x)//计算乘法逆元   {   返回(x) & # 63;gf_alog (255 - gf_log (x)): 0;   }   uint8_t rj_sbox (uint8_t x)   {   uint8_t y,某人;   某人=y=gf_mulinv (x);   y=(y

基于C语言实现的aes256加密算法示例