目录
介绍
这组纯C#类实现了加密Tiger哈希算法。它继承自.NET的HashAlgorithm类等可在任何地方用作.NET的内置哈希函数已被使用。虽然不如C++或ASM生成的本机机器代码快,但它仍然比我发现的其他C#实现(2010)快30%左右。
这些表不是让现成的S-box表膨胀源代码,而是在第一次使用时生成,在当前硬件上大约需要1毫秒(1毫秒)(2022年)。
该程序已经用许多不同的二进制文件进行了测试,并且大多数测试向量都是由Tiger的创建者提供的。
背景
加密哈希将任意长度的数据块(例如,密码,文件)映射到固定长度的哈希值作为单向函数(=不可逆)。
虎式坦克设计于1995年,因此有足够的时间进行深入分析,迄今为止还没有成功攻击完整的24发虎式坦克。查阅维基百科或哈希函数休息室以检查自本文撰写以来是否发现了新的漏洞总是一个好主意。
其安全级别可与RIPEMD-160或SHA-256相媲美。它适用于整个512位输入数据块,并产生192位哈希值输出。与512位边界不一致的输入数据(通常情况)将相应地填充。
Tiger本身是一种64位优化的算法,但在较窄的总线上仍然可以很好地运行。此实现进行了一些优化,这些优化不会明显降低64位性能,但对32位系统有很大帮助。
底层加密设计基本上在维基百科上描述,在发明人的网页上有更详细的描述。S-Box的数据取自参考实现。
某些功能(例如,FileStream处理)由.NET Framework通过抽象HashAlgorithm基类提供。
使用代码
该类是直接创建/实例化的,但通过该abstract HashAlgorithm类使用/调用:
using System.Security.Cryptography;
using Tiger=SoftwareUnion.Tiger;
HashAlgorithm myhash;
switch(AlgorithmToUse)
{ case "MD5": myhash=new MD5CryptoServiceProvider();
case "TIGER": myhash=new Tiger(); // <<-- create the object
// [...]
default: throw new NotImplementedException();
}
// vv-- then ask framework's HashAlgorithm class to
// coordinate and call our own class methods
myhash.ComputeHash( File.OpenRead("myfile.bin") );
byte[] the_hash_result=myhash.HashValue;
Tiger的版本2仅在升级到0x80 0x0的填充值上有所不同(ProcessFinalBlock函数中已经有注释)。
https://www.codeproject.com/Articles/149061/A-Tiger-Hash-Implementation-for-C