AVR单片机的RC5和RC6算法区别、实现与优化

时间:2013-12-06来源:网络

  表2 常数Pw、Qw取值表

W163264
Pw0xB7E10xB7E151630xB7E151628AED2A6B
Qw0x9E370x9E3779B90x9E3770B97F4A7C15

(2)RC5加密算法过程的伪代码表示

  Input(A,B)

  A=A+S(0)B=B+S[1]

  for i=1 to r do

  A=((A+B)B)+S[2i]

  B=((B+A)A)+S[2i+1]

  Output(A,B)

  其中初始的A、B分别为要加密的两个比特数为w的数据,最终的A、B分别为加密好的两个比特数为w的数据。

(3)RC5解密算法过程的伪代码表示

  Input(A,B)

  for i=r down to 1 do

  B=((B-S[2i+1])>>>A)+A

  A=((A-S[2i])>>>B)+B

  A=A-S[0] B=B-S[1]

  Output (A,B)

  其中初始A、B中的数据就是已经加密了的比特数为w的数据,最终的A、B中的数据为解密后的比特数为w的数据。

1.4 RC6算法

(1)RC6算法混合密钥生成过程伪代码表示

  RC6混合密钥生成过程与RC5相同,只是t的取值为2r+4。

(2)RC6加密算法过程伪代码表示

  Input(A,B,C,D)

  B=B+S[0]D=D+S[1]

  for i=1 to r do

  t=(B×(2B+1))log2w

  u=(D×(2D+1))1og2w

  A=((A+t)t)+S[2i]

  C=((C+u)u)+S[2i+1]

  (A,B,C,D)=(B,C,D,A)

  A=A+S[2i+2]C=C+S[2i+3]

  Output(A,B,C,D)

  其中初始的A、B、C、D分别为要加密的四个比特数为w的数据,最终的A、B、C、D分别为加密好的四个比特数为w的数据。

(3)RC6解密算法过程的伪代码表示

  Input(A,B,C,D)

  C=C-S[2i+3]A=A-S[2i+2]

  for i=1 to r do

  (A,B,C,D)=(D,A,B,C)

  u=(D×(2D+1))log2w

  t=(B×(2B+1))log2w

  C=((C-S[2(r-i)+3])>>>t)+u

  A=((A-S[2(r-i)+2])>>>u)+t

  D=D-S[1] B=B-S[0]

  Output(A,B,C,D)

  其中初始的A、B、C、D分别为已经被加密的四个比特数为w的数据,最终的A、B、C、D分别为解密后的四个比特数为w的数据。

2 RC5和RC6算法的实现及改进

2.1 AVR单片机的RC5和RC6算法流程

  RC5及RC6算法加密过程实现流程图如图1所示,解密过程实现流程图如图2所示,总体过程流程图如图3所示。

AVR单片机的RC5和RC6算法区别、实现与优化

AVR单片机的RC5和RC6算法区别、实现与优化

AVR单片机的RC5和RC6算法区别、实现与优化

2.2 AVR单片机RC5和RC6算法的改进

  ①在进行算法流程的安排时,考虑到AVR高速嵌入式单片机只有32个8位寄存器,为了节省寄存器的使用,应该在混合密钥生成过程执行后,再把待加密的数据赋予寄存器。这样在混合密钥生成过程以前的寄存器都可以被使用,而不会对整个算法的执行结果造成影响。

  ②在进行RC5及RC6算法参数的选择时,考虑到AVR高速嵌入式单片机指令最多只支持16位数据相加以及程序的简洁化,所以在本程序中选择w为16而没有选择w为32,r和b的值依据Rivest的建议分别取为12和16。

  ③在执行算法中的左循环或者右循环运算时,考虑到循环移位的效果,实际循环移位的位数应该为要执行移位次数的低1log2w位。在本程序中为要执行移位次数的后四位。

  ④在执行算法中的模2w加法运算、模2w减法运算、模2w乘法运算时,由于2w的取值为65536,而2个8位寄存器(0~15位)最高可以表 示数据的值为65535,数据再大就要向高位进位,所以在本程序执行上述的算法只需要考虑到2个8位寄存器所表达的值就得到了上述运算的最终结果,而不用 再进行模2w运算。

1 2 3

关键词: AVR单片机 RC5 RC6算法

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版