TEA算法的VB实现代码的使用说明

自从公开了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 ;}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值