`
tomEnjoy
  • 浏览: 142409 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

3种方法实现CRC32

    博客分类:
  • java
阅读更多
/*************************************************************************
* Compilation: javac CRC32.java
* Execution: java CRC32 s
*
* Reads in a string s as a command-line argument, and prints out
* its 32 bit Cyclic Redundancy Check (CRC32 or Ethernet / AAL5 or ITU-TSS).
*
* Uses direct table lookup, calculation, and Java library.
*
* % java CRC32 123456789
* CRC32 (via table lookup) = cbf43926
* CRC32 (via direct calculation) = cbf43926
* CRC32 (via Java's library) = cbf43926
*
*
*
* Uses irreducible polynomial:
* 1 + x + x^2 + x^4 + x^5 + x^7 + x^8 +
* x^10 + x^11 + x^12 + x^16 + x^22 + x^23 + x^26
*
* 0000 0100 1100 0001 0001 1101 1011 0111
* 0 4 C 1 1 D B 7
*
* The reverse of this polynomial is
*
* 0 2 3 8 8 B D E
*
*
*
*************************************************************************/


public class CRC32 {

public static void main(String[] args) {

/**************************************************************************
* Using table lookup
* Reference: http://snippets.dzone.com/tag/crc32
**************************************************************************/

int[] table = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
};


byte[] bytes = args[0].getBytes();
int crc = 0xffffffff;
for (byte b : bytes) {
crc = (crc >>>8^ table[(crc ^ b) & 0xff];
}

// flip bits
crc = crc ^ 0xffffffff;

System.out.println("CRC32 (via table lookup) = " + Integer.toHexString(crc));



/**************************************************************************
* Using direct calculation
**************************************************************************/

crc = 0xFFFFFFFF; // initial contents of LFBSR
int poly = 0xEDB88320; // reverse polynomial

for (byte b : bytes) {
int temp = (crc ^ b) & 0xff;

// read 8 bits one at a time
for (int i = 0; i < 8; i++) {
if ((temp & 1) == 1) temp = (temp >>> 1) ^ poly;
else temp = (temp >>> 1);
}
crc = (crc >>>8^ temp;
}

// flip bits
crc = crc ^ 0xffffffff;

System.out.println("CRC32 (via direct calculation) = " + Integer.toHexString(crc));



/**************************************************************************
* Using Java's java.util.zip.CRC32 library
**************************************************************************/
java.util.zip.CRC32 x = new java.util.zip.CRC32();
x.update(bytes);
System.out.println("CRC32 (via Java's library) = " + Long.toHexString(x.getValue()));

}

}

 

分享到:
评论

相关推荐

    Python常用base64 md5 aes des crc32加密解密方法汇总

    Python内置的base64模块可以实现base64、base32、base16、base85、urlsafe_base64的编码解码,python 3.x通常输入输出都是二进制形式,2.x可以是字符串形式。 base64模块的base64编码、解码调用了binascii模块,...

    加密算法 模块 加密算法 模块

    标准算法模块是集DES、3DES、AES、RSA、MD5、BlowFish、TEA、RC6等标准算法为一体的算法包,同时在模块中使用了Anti-Debug和程序自校验功能(涉及到软件的加壳和CRC32)、软件使用次数限制,更好的保护您的软件。...

    华中某工科985+电信学院+硕士专业课+通用软件无线电实验报告

    本实验报告主要介绍了通用软件无线电(移动通信)实验的详细过程和原理,包括TD-LTE CRC 校验和码块分割的原理和实现方法。 一、实验目的与设备 实验的主要目的有两个:(1)掌握 TD-LTE CRC 校验和码块分割的原理...

    单片机数据通信典型应用大全

    2.5 循环冗余校验(CRC)的软件实现 2.5.1 按位计算CRC码 2.5.2 按字节计算CRC码 2.5.3 按半字节计算CRC 2.6 小结 第3章 RS-232通信协议 3.1 RS-232通信协议概述 3.1.1 机械特性 3.1.2 电气特性 3.1.3 功能...

    TD-SCDMA第三代移动通信系统、信令及实现

    与其他介绍第三代移动通信的专著不同的是,本书把介绍的重点放在第三代移动通信技术所涉及的信令体系和实现方法方面。或者说,本书是从系统的角度来描述第三代移动通信系统,而对其涉及到的诸多算法并不作深入的介绍...

    秋无痕一键优化Windows 7(32位)专版 V201007

    CRC32: 8DC990E8 通过本软件,可帮您省去烦琐的操作,实现一键优化设置WINDOWS 7 X86,所有优化都经过多机测试,确保安全、无损、稳定、有效。 所有选项均清楚列出,并可随意选择,让你优化时心中有数。必要选项均...

    完全掌握加密解密实战超级手册.zip02

    75第3章 不同的加密解密算法 763.1 数据加密的缘由 773.1.1 数据加密技术概述 773.1.2 为什么要进行数据加密 773.1.3 数据加密的原理 773.1.4 加密技术与密码分析 793.2 Hash算法基础 813.2.1 CRC32算法 813.2.2 MD5...

    程序员实用算法——源码

    译者序 前言 致谢 第1章 绪论  1.1 评估算法  1.2 修改算法  1.2.1 主要的优化:I/O  1.2.2 主要的优化:函数调用  1.3 资源和参考资料 ... 10.3.3 CRC 32   10.4 资源和参考资料

    vc++ 应用源码包_3

    win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属...

    完全掌握加密解密实战超级手册.z01

    763.1 数据加密的缘由 773.1.1 数据加密技术概述 773.1.2 为什么要进行数据加密 773.1.3 数据加密的原理 773.1.4 加密技术与密码分析 793.2 Hash算法基础 813.2.1 CRC32算法 813.2.2 MD5算法 823.2.3 SHA算法 853.3 ...

    modbus通信协议

    错误检测域为从设备提供了一种验证消息内容是否正确的方法。 (2)回应 如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。...

    vc++ 应用源码包_1

    win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属...

    vc++ 应用源码包_2

    win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属...

    vc++ 应用源码包_6

    win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属...

    vc++ 应用源码包_5

    win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属...

    【软件加密_技术内幕】

    [Trial version] 第3章 Win32 调试API [Trial version] 病毒是如何抗动态测试.htm [Trial version] 3.1 Win32调试API原理 [Trial version] Win32调试API第一部分.htm [Trial version] Win32调试API第二部分.htm...

    SiriusCoder C#类库 代码生成器

    360等软件会报安全未知软件,请允许执行。 v1.1.2014.10更新 ...CRC32 :EAD371EA 如果需要交流,加群:点软件上面的QQ直接加哦! 本软件适用开发小软件吧,大软件不知道性能怎么样,欢迎高手指点!

    软件加密技术内幕配套光盘(iso版本)

    计算PE文件代码区块CRC32的工具,可以将结果写进文件里 │ │ │ │ └─memcrc32 ;需要校验内存代码数据的程序 │ │ │ └─Detect Breakpoint ;校验内存中的片段代码的样例 │ │ └─CRC原理 ;arbin翻译的《CRC...

    vc++ 开发实例源码包

    win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 如题。 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南...

Global site tag (gtag.js) - Google Analytics