c 语言aes算法,AES 加密算法的 C 语言实现

本文详细介绍了如何在C语言中实现AES加密算法,包括初始化表、字节操作函数、轮函数和密钥扩展等核心步骤。通过示例代码展示了加密和解密过程,适合理解AES工作原理和进行C语言加密编程。
摘要由CSDN通过智能技术生成

#include

<

stdio.h

>

#include

"

aes.h

"

static

u8 pow_tab[

256

];

static

u8 log_tab[

256

];

static

u8 sbx_tab[

256

];

static

u8 isb_tab[

256

];

static

u32 rco_tab[

10

];

static

u32 ft_tab[

4

][

256

];

static

u32 it_tab[

4

][

256

];

static

u32 fl_tab[

4

][

256

];

static

u32 il_tab[

4

][

256

];

static

inline u8

byte

(

const

u32 x ,

const

unsigned n)

{

return

x

>>

(n

<<

3

);

}

static

inline u32 rol32(u32 word, unsigned

int

shift)

{

return

(word

<<

shift)

|

(word

>>

(

32

-

shift));

}

static

inline u32 ror32(u32 word, unsigned

int

shift)

{

return

(word

>>

shift)

|

(word

<<

(

32

-

shift));

}

static

inline u8 f_mult(u8 a , u8 b )

{

u8 aa

=

log_tab[a];

u8 cc

=

aa

+

log_tab[b];

return

pow_tab[cc

+

(cc

<

aa

?

1

:

0

)];

}

#define

ff_mult(a,b) (a && b ? f_mult(a,b) : 0 )

#define

f_rn(bo, bi, n, k)

bo[n]

=

ft_tab[

0

][

byte

(bi[n],

0

)]

^

ft_tab[

1

][

byte

(bi[(n

+

1

)

&

3

],

1

)]

^

ft_tab[

2

][

byte

(bi[(n

+

2

)

&

3

],

2

)]

^

ft_tab[

3

][

byte

(bi[(n

+

3

)

&

3

],

3

)]

^

*

(k

+

n)

#define

i_rn(bo, bi, n, k)

bo[n]

=

it_tab[

0

][

byte

(bi[n],

0

)]

^

it_tab[

1

][

byte

(bi[(n

+

3

)

&

3

],

1

)]

^

it_tab[

2

][

byte

(bi[(n

+

2

)

&

3

],

2

)]

^

it_tab[

3

][

byte

(bi[(n

+

1

)

&

3

],

3

)]

^

*

(k

+

n)

#define

ls_box(x)

( fl_tab[

0

][

byte

(x,

0

)]

^

fl_tab[

1

][

byte

(x,

1

)]

^

fl_tab[

2

][

byte

(x,

2

)]

^

fl_tab[

3

][

byte

(x,

3

)] )

#define

f_rl(bo, bi, n, k)

bo[n]

=

fl_tab[

0

][

byte

(bi[n],

0

)]

^

fl_tab[

1

][

byte

(bi[(n

+

1

)

&

3

],

1

)]

^

fl_tab[

2

][

byte

(bi[(n

+

2

)

&

3

],

2

)]

^

fl_tab[

3

][

byte

(bi[(n

+

3

)

&

3

],

3

)]

^

*

(k

+

n)

#define

i_rl(bo, bi, n, k)

bo[n]

=

il_tab[

0

][

byte

(bi[

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值