Tiger学习 之 for/in

[b]一.抛弃Iterator[/b]
for/in语句排除了使用Iterator类的使用。
[code]
List<String> list = new ArrayList<String>();
list =getList();
for(String string: list){
System.out.println("======: "+ string );
}

for(Iterator i = list.iterator(); i.hasNext();){
String string = (String)i.next();
System.out.println("======: "+ string );
}
[/code]
语法
[quote]
for(declaration : expression)
statment
[/quote]

其实编译器会把它编译成普通的for循环处理的,因此,Tiger的for/in仅仅是让你少打点字,没有什么其他的优势....but注意:

expression必须是Array或者一个实现Iterable接口的对象,且能分配兼容于declaration中声明的变量类型(之执行一次)

declaration是由类型和变量组成的(必须在循环中声明)。可以采用annotation和final修饰符(防止循环变量采用任何非循环做指点的expression值和强调expression值不能通过循环变量来修改)

[b]二. Over array[/b]
很简单..
[quote]
int[] array = new int[]{1,2,3,4,5,6,7,8,9,0};
for(int i :array){
System.out.println("======: "+ i );
}
[/quote]
当然,对象数组一样可以...

[b]三. Over Collection[/b]
跟over rarray一样...仅仅多了需要转换类型..那么

避免不需要的类型转换----声明collection的时候使用generic(泛型)吧!

[b]四. 让自己的Class也可以for/in[/b]
一、 继承之Array或Collection类吧..
[quote]public class myList extends LinkedList{...}[/quote]
二、实现Iterable接口吧,这个需要你手动处理iteration...
[quote]public class myList implements Iterable{...}[/quote]

[b]五. 一写for/in无法办到的事情[/b]
for/in很方便,but
1.无法判断访问list位置,(例如字符串合并时,最后一个连接字符的处理)
2.无法访问list本身变量,(例如在循环时removme某一元素)
3.反向array或collection元素
4.调用get而不是调用iterator来iterate list的元素
5......
### Tiger 哈希算法的实现与原理 #### 背景与定义 Tiger 是一种由 Ross Anderson 和 Eli Biham 设计的加密哈希函数,最初发布于 1995 年。它以其高效性和安全性著称,在许多应用场景中被广泛采用。该算法能够处理任意长度的消息并生成固定大小的摘要(通常是 192 位),同时也支持 128 位和 256 位变体[^1]。 #### 工作机制 Tiger 算法的核心在于分组处理输入消息,并通过一系列复杂的变换操作来生成最终的散列值。以下是其主要工作流程: 1. **预处理阶段**: 输入消息会被分割成固定的块大小(通常为 64 字节)。如果最后一块不足指定大小,则会填充特定的数据以满足需求。 2. **压缩函数**: 这一过程涉及多轮迭代运算,每一轮都利用先前的结果更新当前状态向量中的三个字 (X, Y, Z),这些字经过多次置换、旋转以及异或等逻辑运算逐步演化至最终形式。 3. **输出转换**: 经过所有区块处理完毕之后,得到的状态即作为原始信息对应的唯一指纹表示——这就是所谓的“tiger digest”。 #### Python 实现示例 下面提供了一个简化版的 tiger hash 函数 python 实现例子: ```python class TigerHash: def __init__(self): self.state = [0x01234567, 0xFEDCBA98, 0x89ABCDEF] @staticmethod def rotate_left(value, bits): return ((value << bits) | (value >> (32 - bits))) & 0xFFFFFFFF def process_block(self, block): X,Y,Z=self.state[:] # Simplified transformation steps... for i in range(24): if i % 4 == 0: temp=(Y ^ (Z<<((i%3)+1))) X=TigerHash.rotate_left(temp,(i//3)%3+1)^block[i>>2] elif i % 4==1 : temp=(Z^(X>>((((i)//3)%3)+1))) Y=TigerHash.rotate_left(temp,(i//3)%3+5)^block[(i>>2)] elif i % 4==2 : temp=(X^TigerHash.rotate_left(Y,(i//3)%3+1)) Z=temp^block[(i>>2)] else: temp=(Y^(TigerHash.rotate_left(Z,(i//3)%3+5))) X=X^temp self.state=[a+b&0xffffffff for a,b in zip([X,Y,Z],self.state)] def main(): hasher = TigerHash() message=b'example' blocks=bytearray(message.ljust(len(message)+(64-(len(message)%64))if len(message)%64!=0else message) while len(blocks)>0: current_block=int.from_bytes(bytes(blocks[:64]), byteorder='big') del blocks[:64] hasher.process_block(current_block) main() ``` 上述代码片段展示了如何构建一个基础框架去模拟 tiger 的核心功能之一 —— 处理单个数据块的过程。需要注意的是这只是一个非常简化的模型;真实的 tiger 散列计算要复杂得多,包含了更多细节上的考虑比如边界条件管理等等[^4]。 #### 总结 综上所述,Tiger 哈希算法凭借其实现效率高、资源消耗少的特点成为众多领域内的理想选择。无论是理论层面还是实践角度,理解它的运作机理对于深入学习现代密码技术都有重要意义。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值