已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/* This is an implementation of the RIJNDAEL cryptosystem for 128 bit plaintext block. This programme only gives the instance of 128 bit key. You can modify a little details to meet your need for 192 or 256 bit key input */#include stdio.htypedef unsigned char u1byte; /* an 8 bit unsigned character type */typedef unsigned long u4byte; /* a 32 bit unsigned integer type */#define LARGE_TABLESu1byte pow_tab256;u1byte log_tab256;u1byte sbx_tab256;u1byte isb_tab256;u4byte rco_tab 10;u4byte ft_tab4256;u4byte it_tab4256;#ifdef LARGE_TABLES u4byte fl_tab4256; u4byte il_tab4256;#endifu4byte tab_gen = 0;u4byte k_len;u4byte e_key60;u4byte d_key60;#define ff_mult(a,b) (a & b ? pow_tab(log_taba + log_tabb) % 255 : 0)#define byte(x,n) (u1byte)(x) (8 * n)#define f_rn(bo, bi, n, k) bon = ft_tab0byte(bin,0) ft_tab1byte(bi(n + 1) & 3,1) ft_tab2byte(bi(n + 2) & 3,2) ft_tab3byte(bi(n + 3) & 3,3) *(k + n)#define i_rn(bo, bi, n, k) bon = it_tab0byte(bin,0) it_tab1byte(bi(n + 3) & 3,1) it_tab2byte(bi(n + 2) & 3,2) it_tab3byte(bi(n + 1) & 3,3) *(k + n)#define rotr(x,n) (x) (int)(n) | (x) (32 - (int)(n)#define rotl(x,n) (x) (32 - (int)(n)#ifdef LARGE_TABLES#define ls_box(x) ( fl_tab0byte(x, 0) fl_tab1byte(x, 1) fl_tab2byte(x, 2) fl_tab3byte(x, 3) )#define f_rl(bo, bi, n, k) bon = fl_tab0byte(bin,0) fl_tab1byte(bi(n + 1) & 3,1) fl_tab2byte(bi(n + 2) & 3,2) fl_tab3byte(bi(n + 3) & 3,3) *(k + n)#define i_rl(bo, bi, n, k) bon = il_tab0byte(bin,0) il_tab1byte(bi(n + 3) & 3,1) il_tab2byte(bi(n + 2) & 3,2) il_tab3byte(bi(n + 1) & 3,3) *(k + n)#else#define ls_box(x) (u4byte)sbx_tabbyte(x, 0) 0) (u4byte)sbx_tabbyte(x, 1) 8) (u4byte)sbx_tabbyte(x, 2) 16) (u4byte)sbx_tabbyte(x, 3) 24)#define f_rl(bo, bi, n, k) bon = (u4byte)sbx_tabbyte(bin,0) rotl(u4byte)sbx_tabbyte(bi(n + 1) & 3,1), 8) rotl(u4byte)sbx_tabbyte(bi(n + 2) & 3,2), 16) rotl(u4byte)sbx_tabbyte(bi(n + 3) & 3,3), 24) *(k + n)#define i_rl(bo, bi, n, k) bon = (u4byte)isb_tabbyte(bin,0) rotl(u4byte)isb_tabbyte(bi(n + 3) & 3,1), 8) rotl(u4byte)isb_tabbyte(bi(n + 2) & 3,2), 16) rotl(u4byte)isb_tabbyte(bi(n + 1) & 3,3), 24) *(k + n)#endifvoid gen_tabs(void) u4byte i, t; u1byte p, q; /* log and power tables for GF(2*8) finite field with */ /* 0x11b as modular polynomial - the simplest prmitive */ /* root is 0x11, used here to generate the tables */ for(i = 0,p = 1; i 256; +i) pow_tabi = (u1byte)p; log_tabp = (u1byte)i; p = p (p 1) (p & 0x80 ? 0x01b : 0); log_tab1 = 0; p = 1; for(i = 0; i 10; +i) rco_tabi = p; p = (p 1) (p & 0x80 ? 0x1b : 0); /* note that the affine byte transformation matrix in */ /* rijndael specification is in big endian format with */ /* bit 0 as the most significant bit. In the remainder */ /* of the specification the bits are numbered from the */ /* least significant end of a byte. */ for(i = 0; i 7) | (q 7) | (q 7) | (q 7) | (q 1); p = q 0x63; sbx_tabi = (u1byte)p; isb_tabp = (u1byte)i; for(i = 0; i 256; +i) p = sbx_tabi;#ifdef LARGE_TABLES t = p; fl_tab0i = t; fl_tab1i = rotl(t, 8); fl_tab2i = rotl(t, 16); fl_tab3i = rotl(t, 24);#endif t = (u4byte)ff_mult(2, p) | (u4byte)p 8) | (u4byte)p 16) | (u4byte)ff_mult(3, p) 24); ft_tab0i = t; ft_tab1i = rotl(t, 8); ft_tab2i = rotl(t, 16); ft_tab3i = rotl(t, 24); p = isb_tabi; #ifdef LARGE_TABLES t = p; il_tab0i = t; il_tab1i = rotl(t, 8); il_tab2i = rotl(t, 16); il_tab3i = rotl(t, 24);#endif t = (u4byte)ff_mult(14, p) | (u4byte)ff_mult( 9, p) 8) | (u4byte)ff_mult(13, p) 16) | (u4byte)ff_mult(11, p) 24); it_tab0i = t; it_tab1i = rotl(t, 8); it_tab2i = rotl(t, 16); it_tab3i = rotl(t, 24); tab_gen = 1;#define star_x(x) (x) & 0x7f7f7f7f) 7) * 0x1b)#define imix_col(y,x) u = star_x(x); v = star_x(u); w = star_x(v); t = w (x); (y) = u v w; (y) = rotr(u t, 8) rotr(v t, 16) rotr(t,24)/* initialise the key schedule from the user supplied key */#define loop4(i) t = ls_box(rotr(t, 8) rco_tabi; t = e_key4 * i; e_key4 * i + 4 = t; t = e_key4 * i + 1; e_key4 * i + 5 = t; t = e_key4 * i + 2; e_key4 * i + 6 = t; t = e_key4 * i + 3; e_key4 * i + 7 = t; #define loop6(i) t = ls_box(rotr(t, 8) rco_tabi; t = e_key6 * i; e_key6 * i + 6 = t; t = e_key6 * i + 1; e_key6 * i + 7 = t; t = e_key6 * i + 2; e_key6 * i + 8 = t; t = e_key6 * i + 3; e_key6 * i + 9 = t; t = e_key6 * i + 4; e_key6 * i + 10 = t; t = e_key6 * i + 5; e_key6 * i + 11 = t; #define loop8(i) t = ls_box(rotr(t, 8) rco_tabi; t = e_key8 * i; e_key8 * i + 8 = t; t = e_key8 * i + 1; e_key8 * i + 9 = t; t = e_key8 * i + 2; e_key8 * i + 10 = t; t = e_key8 * i + 3; e_key8 * i + 11 = t; t = e_key8 * i + 4 ls_box(t); e_key8 * i + 12 = t; t = e_key8 * i + 5; e_key8 * i + 13 = t; t = e_key8 * i + 6; e_key8 * i + 14 = t; t = e_key8 * i + 7; e_key8 * i + 15 = t; void set_key(const u4byte in_key, const u4byte key_len) u4byte i, t, u, v, w; if(!tab_gen) gen_tabs(); k_len = (key_len + 31) / 32; e_key0 = in_key0; e_key1 = in_key1; e_key2 = in_key2; e_key3 = in_key3; switch(k_len) case 4: t = e_key3; for(i = 0; i 10; +i) loop4(i); break; case 6: e_key4 = in_key4; t = e_key5 = in_key5; for(i = 0; i 8; +i) loop6(i); break; case 8: e_key4 = in_key4; e_key5 = in_key5; e_key6 = in_key6; t = e_key7 = in_key7; for(i = 0; i 7; +i) loop8(i); break; d_key0 = e_key0; d_key1 = e_key1; d_key2 = e_key2; d_key3 = e_key3; for(i = 4; i 6) f_nround(b1, b0, kp); f_nround(b0, b1, kp); if(k_len 4) f_nround(b1, b0, kp); f_nround(b0, b1, kp); f_nround(b1, b0, kp); f_nround(b0, b1, kp); f_nround(b1, b0, kp); f_nround(b0, b1, kp); f_nround(b1, b0, kp); f_nround(b0, b1, kp); f_nround(b1, b0, kp); f_nround(b0, b1, kp); f_nround(b1, b0, kp); f_lround(b0, b1, kp); out_blk0 = b00; out_blk1 = b01; out_blk2 = b02; out_blk3 = b03;/* decrypt a block of text */#define i_nround(bo, bi, k) i_rn(bo, bi, 0, k); i_rn(bo, bi, 1, k); i_rn(bo, bi, 2, k); i_rn(bo, bi, 3, k); k -= 4#define i_lround(bo, bi, k) i_rl(bo, bi, 0, k); i_rl(bo, bi, 1, k); i_rl(bo, bi, 2, k); i_rl(bo, bi, 3, k)void decrypt(const u4byte in_blk4, u4byte out_blk4) u4byte b04, b14, *kp; b00 = in_blk0 e_key4 * k_len + 24; b01 = in_blk1 e_key4 * k_len + 25; b02 = in_blk2 e_key4 * k_len + 26; b03 = in_blk3 e_key4 * k_len + 27; kp = d_key + 4 * (k_len + 5); if(k_len 6) i_nround(b1, b0, kp); i_nround(b0, b1, kp); if(k_len 4) i_nround(b1, b0, kp); i_nround(b0, b1, kp); i_nround(b1, b0, kp); i_nround(b0, b1, kp); i_nround(b1, b0, kp); i_nround(b0, b1, kp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年职业资格鉴定中心技能考核评估技术标准知识考察试题及答案解析
- 医学影像诊断岗位面试技巧分享
- 亚马逊行业趋势分析如何应对未来招聘市场变化
- 专利咨询师高校专利转化项目计划书
- 医护面试实战经典案例解析与应对策略
- 医学领域新州护士职业发展与面试技巧实战指南
- 人事经理工作计划与招聘培训方案
- 2025年信阳职业技术学院单招职业倾向性测试题库及答案一套
- 临沂道法实践中的问题解决策略
- 供应链管理优化物流与库存的实战策略
- 2025年河北保定市公安局招聘警务辅助人员48名考试笔试备考题库及答案解析
- 注意缺陷多动障碍儿童社交技能培养方案
- 小学高级数学教师评审答辩资料范本
- 市政管道高压水射流清淤施工方案
- 江苏省苏州市阳光调研2025-2026学年高一上学期期中考试化学试题(含答案)
- 国防安全主题课件
- 2025-2026学年第一学期浙江省宁波市余姚市六校期中联考七年级语文试卷(含答案)
- 2025广东广州市越秀区流花街招聘党建工作指导员1人笔试考试参考题库及答案解析
- 教资考试论述题含答案
- 2025年国家开放大学(电大)《教育科学研究方法》期末考试复习题库及答案解析
- 阿尔茨海默症医疗护理查房
评论
0/150
提交评论