admin 管理员组

文章数量: 1086019


2024年4月25日发(作者:laravel访问路由方式)

维普资讯

………………………………………………………… 

实用第一 智慧密集 

称加解密算 RC6 j的 实现ll 

在各种对称加密算法中,RSA公司先后推出了RC2、RC5 

和RC6等密码算法,其中RC6是由Rivest、Robshaw、Sidney 

和Yin等人设计。RC6是为_『有效抵抗对RC5的攻击而设计出 

的强化版本,同时RC6也是AES首批15个候选算法之一。可 

以在许多领域找到RC6的身影,比如在无线数据传输应用方面 

的AVR高速嵌入式单片机的加解密部分;为保护手机上的私 

人照片、录音、视频和私人文件的Smartphoneware软件包等。 

Windows Visual Studio.NET在System.Security.Cryptography命名 

空间提供了众多的加解密类,其中就包括RC2,但未提供RC6 

算法。笔者在对RC6算法进行认真的分析后,对由stirng型数 

据读入的密钥数据是转换为128位密钥的过程进行了研究,同 

时以128位输入和输出块,2O轮迭代和256位输入密钥为 

例,结合.NET,用C#语言实现了RC6算法。 

图程序运行效果 

RC6算法 

RC6可表示为RC6一w/r/b,其中W是RC6中数据运算单 

charU asciiChars意new char、ascii. 

GetCharCount(asciiBytest 0。asciiBytes.Length、 

asciL GetChars(asciiBytes。0 asciiB ̄es Length,。 。

asciiChars 

位“字”的长度,r是迭代轮数、b是密钥种子按字节的长 

度,本算法由三部分组成,分别为密钥扩展算法、加密算法和 

解密算法,共使用了六种基本运算:①模2w加法运算,表示 

算法中使用两个常数P32和Q32,其中: 

P32=odd《《e一2l¥2 ¥32)=Oxb7el5163; 

为“+”;②模2w减法运算,表示为“一”;③逐位异或运 

算,表示为o;④循环左移,字a循环左移b比特表示为 

Q32=odd((phi一1) 2 32)=Ox9e3779b9; 

e是自然对数的底(2.71828…),phi是黄金分割率 

(1.61803…),循环左移函数RotL和循环右移函数RotR 

public Uint RotL(Uintx,Uinty,intw) 0 

a<<<b”;⑤循环右移,字a循环右移b比特表示为 

a>>>b”;⑥模2w乘法,表示为“X”。为了满足AES的 

要求,RC6的输入和输出块均为128位,迭代轮数为20轮, 

密钥长度一般取128/192/256位等三种,其实现可在多种程 

序设计语言下进行设计,但多数资料的源代码对其实现有几个 

缺陷。一是均以卜六进制数给出128为密钥,从而对以string 

型数据读入的密钥数据是怎样转换为128位密钥的过程进行了 

回避;二是对w/r/b这!个重要参数进行硬编码,从而源代 

return((x<<(int)(y&OxFF))I(x>>(int)((w-(y& 

OxFFI)))): 

、 

publicUintRotR(Uintx.Uinty.intW、 I : 

| 

謦。 

码的灵活性不强;二三足几乎都是以c语言实现其算法,其他程 

序版本不易找到。程序运行界面如下图所示。 

) 

return{{x>>{int){y&OxFF))I{×<<{int)《{w 0{y& 

OxFF))))); 

二、公共部分 

c撑下stirng型Unicode字符集转换为字节流char【】的代码 

如下 

byte【】asciiBytes=Encoding。Convert(unicode.asci 

unicode。GetBytes(this.m_sEncryptionKey)): 

三、密钥扩展 

1.密钥类型转换 

将密钥m sEneryptionKey从string型转换为Uint字数组 

11一WordBoxo 

≥“20 0翟8技.8巧与蠢护 鼍-嗜疆 

维普资讯

… -

COMPUT硼PROG咖MING删眦舢C …………………………………………¨ 

为两字节16位。在这里我们使用“little—endian fashion”字节 

序,即低位在前,高位在后的方式。为简明起见,输入明文均 

般的密码学书籍均直接给出128位十六进制数作为用户 

密钥,而对于以string型数据读入的密钥数据是怎样转换为128 

位密钥的过程进行了回避。笔者采用两步来实现这一过程,其 

为ASCII字符,由此,在byte型数组input中,低位的input 

【0]、input[2]、.…input[30]这l6个字节共计128位数据就 

是明文数据。这128位数据转换为4个32位值的方法的代码 

如下: 

En ̄ingeric_default=Encoding.Unicode; 

byte【l input;enc_default.GetBytes 

是将密钥m_sEncryptionKey从string型转换为字节数组asci- 

ichars。其二将字节数组asciichars转换为Uint字数组 

n ordBox。首先注意到ASCII字符集,通过对asciichars【j]做 

0xFF运算,确保高位为零,然后进行循环左移运算。Uint为 

32位长,于是256位密钥要填充8个Uint数,这8个Uint数 

是怎样填充的呢?这里采取的步骤是,做32轮循环,每四轮 

填充一个Uint数,那么32轮后就填充了8个Uint数。每四轮 

是这样填充的,第一轮字节数不移位,填充Uint数的0—7 

位,第二轮字节数左移8位,填充Uint的8—15位,第三轮字 

节数左移16位,填充Uint的16—23位,第四轮字节数左移 

24位,填充Uint的24—3l位,m_nchioherLen为密钥字节数, 

本文为32字节,也就是256位密钥,核心代码如下: 

for(j 0:j<m_nChipherLen;j++) 

{ 

temp (Uint)(asciiChars…&0xFF)<<(8-k(j%4}): 

_

WordBox【j/41+=(Uint)tem p: 

) 

2.混合密钥 

这一步混合密钥字数组n_WordBox到扩展密钥数组 

_

nKey—ExpandBox中,其中为了保证这两个数组在循环中不越 

界,程序采取在单轮循环时i,j的值加l模各自对应的数组长 

度的方法,实现的核心代码如下: 

this.m-J1KeyExpandBox【01=P32; 

fof(j=1:j<2* ̄RoundsLen+4Ij++) 

{ 

this.mj1KeyExpandBox【j】=(byte)(m_nKeyExpandBox【j一 

11+Q32): 

} , 

k。3 Math.Max(m.,nWordLen,2 哪RoundsLen+4): 

for(i=0,j:0:k>0;k一一) 

{ 

A RotL(m_nKeyExpandBox【i1+A+B.3,m_nWord): 

m_nKeyExpandBox…=(byte)A; 

B 4- A: 

B=RotL(n_WordBoxfj】+B,B,m_nWord): 

n_WordBoxfjJ B 

l=(i+1)%(2木rr1_ RoundsLen+4): 

j=(j+1)%m_nWordLen; 

) 

四、RC6的加密 

明文m__sInClearText由stirng型转换为字节数组input并进 

而转换为4个32位值A、B、c、D。 

在c#中,string型为unicode字符集,即每个输入字符均 

(this.mjInClearText): 

fof(k=0:k<4:k 4-+) 

( 

A+:(Uint)(input【2}k】&0xFF)<<(8}k): 

B+=lUint)(input【2}k+8】&0xFF)<<(8 k): 

C+=(Uim)(input【2}k+161&0xFF)<<(8}k): 

D+=fUint)finputf2}k+24 J&0xFF)<<f8}k): 

} 

将扩展密钥数组n_I.ncExpandBox和输入A、B、C、D一起 

进行基本的加密操作。 

本步骤中涉及到A、B、C、D四个变量的循环赋值,即第 

次为(A、B、C、D),第二次为(B、C、D、A),第三次为 

(C、D、A、B)…. 

依此类推,为此程序使用一个中间变量temp,保证每次赋 

值正常,实现核心代码为: 

B+=n

_

LocKeyExpandBox【O1 

D+=n

_

LocKeyExpandBox【1】: 

for(i=1:i《=m_nRoundsLen;i++) 

{ 

U;RotL(D I2¥D+1).5,m_nWord): 

下t RotL(B}(2}B+1),5 m_nWord): 

A=RotL(A^T.U,m』Word)+n_kocKeyExpandBox【2}i1: 

C RotL(C U,T,m_nWord)+n_LocKeyExpandBox【2}i+ 

11: 

temp=A: 

A=B: 

B=C: 

C=D: 

D:temp; 

} 

A+:n

_

LocKeyExpandBox【2 m_nRoundsLen+2】: 

C+=n_LocKeyExpandBox【2 m_nRoundsLen+31: 

转换A、B、C、D为一个字节数组output并进而转换为 

stirng型m_sCryptedText。这一步是第一步的逆操作,实现代码 

如下: 

for(k t0:k《4;k++} 

— 

Ou ̄ut[2木kl茹(byte)((A>>(8栽k))&0xFF) 

、 I 

fOr(k k≮ k七年、 

维普资讯

………………………………………………………… 

实用第一 智慧密集 

{ 

0utpLlt【2木k+8】=(byte)((B>>(8率k))&0xFF) 

) 

for(k=O:k<4:k++) 

{ 

output【2 k+16】=(byte)((C>>(8 k))&0xFF): 

} 

for(k=O k<4:k++) 

{ 

output【2 k+24】=(bVte)((D>>(8 k))&0xFF)= 

} 

charl】outarrchar=new char【enc_default.GetCharCount 

(output 0,output.Length)】: 

eric

_

default.GetChars(output,0,output.Length,outar- 

rchar,O)= 

this.m

_

sCryptedText=newstring(Outarrchar,0,outar- 

rchar.Length); 

byte[1 output1=enc_default.GetBytes 

(this.m_sCryptedText): 

五、RC6的解密 

RC6的解密算法与加密算法差别较大,其核心代码如下: 

C一:n

_

LocKeyExpandBox【2 m_nRoundsLen+3】: 

A一:n_LocKeyExpandBox【2 m』RoundsLen+2】: 

for(i=1:i<=m_nRoundsLen;i++) 

{ 

temp=D: 

D=C: 

C=B: 

B:A: 

A=temp; 

U:RotL(D (2 D+1) 5 m_nWord): 

T=RotL(B (2 B+1),5,m-nWord): 

C=RotR(C—n_LocKeyExpandBox【2 

(m_nRoundsLen—i)+3】,T,m_nWord) U: 

A=RotR(A—n_LocKeyExpandBox【2 

(m_nRoundsLen—i)+2】,U,m_nWord) T: 

} 

D一=n

LocKeyExpandBox【1】: 

B一=n LocKeyExpandBox【0】: 

六、程序说明 

提供了一种针对以string型数据读入的密钥数据转换为位 

密钥字的过程,同时使用256位密钥。通过适当修改各参数的 

值,就可以使用128/192位密钥。 

(收稿日期:2008年6月5日) 

葡iii 溆话与 l_} 

暑期严防黑客潮!上网需“杀毒" 

“密保”双保险 

随着高、中考的结束,以及7月1日暑期长假的临 

近,越来越多的中学生开始陆续放假。近日,在各大黑 

客论坛以及贴吧中,关于学习和交流黑客技术的帖子开 

始明显增多,其中发帖者不乏刚刚放假的中学生。江民 

反病毒专家因此提醒广大电脑用户,暑假来临,上网时 

务必谨防黑客利用病毒盗取各种有价帐号、密码,避免 

自身财产遭到不必要的损失。 

在黑客贴吧里,关于拜师或收徒学习黑客技术的帖 

子近日格外多了起来,“如何破解QQ密码”“教你批量 

抓鸡”等帖子随处可见。其中,初学者交流的内容包括 

如何使用“流光”等端口扫描工具,扫描在线电脑的IP 

地址和开放端El,然后通过运行一些命令得到对方的计 

算机名和操作系统版本,最后通过对方的共享文件或默 

认共享进入对方主机,其中还涉及到如何暴力破解密 

码。层次稍高一些的发帖者已经开始交流如何通过 

HOOK技术修改SSDT表,从而做出能够逃避杀毒软件的 

免杀木马,进行在网上传播进行盗号窃密等违法行为。 

据江民反病毒中心监测发现,6月第3周,网游盗 

号类病毒疫情大幅上升,此类病毒占据了病毒排行榜前 

三,其中”网游大盗”变种感染计算机数量较上周上升了 

39.34%,位列病毒排行榜榜首,”网游窃贼”变种更是较 

前一周暴增了148%,位列病毒排行榜亚军。此类病毒无 

例外的把目标对准目前流行的网络游戏,盗取目标除 

了帐号密码外,还包括游戏分值、虚拟装备、游戏币、 

游戏点卡、仓库密码、角色等级、金钱数量、所在区 

服、计算机名称等所有的信息资料。包括“征途” “天 

堂”“魔兽世界”“完美世界Online”“剑侠情缘liOn— 

line”等几乎所有的流行网游都被病毒盯上,严重威胁广 

大网络游戏玩家的帐号、密码安全。 

江民反病毒专家提醒广大电脑用户和网络游戏玩 

家,暑假上网前,务必使用杀毒软件的“系统诊断”功 

能,对电脑做全面的安全检查,打好系统漏洞补丁,关 

闭不必要的端口和服务,关闭电脑中的所有共享。网络 

游戏玩家可以配合使用“密保”软件,将游戏帐号密码 

输入密保,配合杀毒软件给电脑加上双重保险,减少帐 

号、密码被盗的风险。此外,反病毒专家也提醒广大对 

黑客技术感兴趣的中学生朋友,暑假期间可以学习和研 

究一下黑客技术,但千万不要用来进行盗号窃密等违法 

行为,不要因为图一时之快,给自己带来终生遗憾。 


本文标签: 密钥 进行 电脑 病毒 循环