自从公开了TEA算法的VB代码之后一直有人追问我如何调用这两个过程,如何取得加密/解密结果的问题,在此就针对这点做一个补充说明
关于我给出的TEA算法VB实现的模块代码仅仅实现了TEA算法中最基本的:
以128位密匙(长度4的长整型数组)加密(解密)64位数据(长度2的长整型数组)
用法与算法描述中的C代码基本一样,仅增加了一个可以选择加密轮次的参数,提供16轮和32轮两种选择
由于C代码中使用的是指针参数,我在这个模块里索性就模仿C语言描述,利用ByRef参数返回运算结果
TEAEncode(V() as Long,K() as Long,lType As Integer)过程中,数组V既是提供明文的参数,也是返回加密后密文的参数
TEADecode(V() as Long,K() as Long,lType As Integer)过程中,数组V既是提供密文的参数,也是返回解密后明文的参数
具体范例如下:
Dim V(0 to 1) As Long
Dim K(0 to 3) As Long
'以下是试验用64位明文
V(0)=&H12345678
V(1)=&H87654321
'以下是试验用128位密匙
K(0)=&H11111111
K(1)=&H22222222
K(2)=&H33333333
K(3)=&H44444444
'显示输出明文
Print "明文:" & V(0) & " -- " & V(1)
'以下演示加密过程
Call TEAEncode(V,K,2) 'TEA算法 32轮加密
Print "加密结果:" & V(0) & " -- " & V(1)
'以下演示解密过程
Call TEADecode(V,K,2) 'TEA算法 32轮加密
Print "解密结果:" & V(0) & " -- " & V(1)
------------------------------------------------------
另外副上TEA算法描述中给出的C代码:
void decode(long* v,long* k) {
unsigned long n=32, sum, y=v[0], z=v[1],
delta=0x9e3779b9 ;
sum=delta<<5 ;
/* start cycle */
while (n-->0) {
z-= (y<<4)+k[2] ^ y+sum ^ (y>>5)+k[3] ;
y-= (z<<4)+k[0] ^ z+sum ^ (z>>5)+k[1] ;
sum-=delta ;
}
/* end cycle */
v[0]=y ; v[1]=z ; }
void code(long* v, long* k) {
unsigned long y=v[0],z=v[1], sum=0,delta=0x9e3779b9, n=32;
unsigned long m; /* a key schedule constant */
while (n-->0) { /* basic cycle start */
sum += delta ;
printf("%lu;%lu;%lu\n",sum,sum-delta,delta);
y += (z<<4)+k[0] ^ z+sum ^ (z>>5)+k[1] ;
z += (y<<4)+k[2] ^ y+sum ^ (y>>5)+k[3] ; /* end cycle */
}
v[0]=y;v[1]=z ;}
关于我给出的TEA算法VB实现的模块代码仅仅实现了TEA算法中最基本的:
以128位密匙(长度4的长整型数组)加密(解密)64位数据(长度2的长整型数组)
用法与算法描述中的C代码基本一样,仅增加了一个可以选择加密轮次的参数,提供16轮和32轮两种选择
由于C代码中使用的是指针参数,我在这个模块里索性就模仿C语言描述,利用ByRef参数返回运算结果
TEAEncode(V() as Long,K() as Long,lType As Integer)过程中,数组V既是提供明文的参数,也是返回加密后密文的参数
TEADecode(V() as Long,K() as Long,lType As Integer)过程中,数组V既是提供密文的参数,也是返回解密后明文的参数
具体范例如下:
Dim V(0 to 1) As Long
Dim K(0 to 3) As Long
'以下是试验用64位明文
V(0)=&H12345678
V(1)=&H87654321
'以下是试验用128位密匙
K(0)=&H11111111
K(1)=&H22222222
K(2)=&H33333333
K(3)=&H44444444
'显示输出明文
Print "明文:" & V(0) & " -- " & V(1)
'以下演示加密过程
Call TEAEncode(V,K,2) 'TEA算法 32轮加密
Print "加密结果:" & V(0) & " -- " & V(1)
'以下演示解密过程
Call TEADecode(V,K,2) 'TEA算法 32轮加密
Print "解密结果:" & V(0) & " -- " & V(1)
------------------------------------------------------
另外副上TEA算法描述中给出的C代码:
void decode(long* v,long* k) {
unsigned long n=32, sum, y=v[0], z=v[1],
delta=0x9e3779b9 ;
sum=delta<<5 ;
/* start cycle */
while (n-->0) {
z-= (y<<4)+k[2] ^ y+sum ^ (y>>5)+k[3] ;
y-= (z<<4)+k[0] ^ z+sum ^ (z>>5)+k[1] ;
sum-=delta ;
}
/* end cycle */
v[0]=y ; v[1]=z ; }
void code(long* v, long* k) {
unsigned long y=v[0],z=v[1], sum=0,delta=0x9e3779b9, n=32;
unsigned long m; /* a key schedule constant */
while (n-->0) { /* basic cycle start */
sum += delta ;
printf("%lu;%lu;%lu\n",sum,sum-delta,delta);
y += (z<<4)+k[0] ^ z+sum ^ (z>>5)+k[1] ;
z += (y<<4)+k[2] ^ y+sum ^ (y>>5)+k[3] ; /* end cycle */
}
v[0]=y;v[1]=z ;}