XXTEA 加密算法前面介绍过了,这次给出的是 Java 版本的实现。用法同 C# 版本的类似(只是大小写不太一样),也是对字节数组进行加密解密的,也全都是静态方法,无须创建对象,加密的内容用其它语言实现的算法也可以解密,反之亦然。下面是算法代码:
xxtea.java
-
/* XXTEA.java
-
*
-
* Author: Ma Bingyao <andot@ujn.edu.cn>
-
* Copyright: CoolCode.CN
-
* Version: 1.6
-
* LastModified: 2006-08-09
-
* This library is free. You can redistribute it and/or modify it.
-
* http://www.coolcode.cn/?p=169
-
*/
-
-
package org.phprpc.util;
-
-
-
public class XXTEA {
-
private XXTEA() {}
-
-
/**
-
* Encrypt data with key.
- *
-
* @param data
-
* @param key
-
* @return
-
*/
-
public static byte[] encrypt(byte[] data, byte[] key) {
-
if (data.length == 0) {
-
return data;
-
}
-
return toByteArray(
-
encrypt(toIntArray(data, true), toIntArray(key, false)), false);
-
}
-
-
/**
-
* Decrypt data with key.
- *
-
* @param data
-
* @param key
-
* @return
-
*/
-
public static byte[] decrypt(byte[] data, byte[] key) {
-
if (data.length == 0) {
-
return data;
-
}
-
return toByteArray(
-
decrypt(toIntArray(data, false), toIntArray(key, false)), true);
-
}
-
-
/**
-
* Encrypt data with key.
- *
-
* @param v
-
* @param k
-
* @return
-
*/
-
public static int[] encrypt(int[] v, int[] k) {
-
int n = v.length - 1;
-
-
if (n < 1) {
-
return v;
-
}
-
if (k.length < 4) {
-
int[] key = new int[4];
-
-
System.arraycopy(k, 0, key, 0, k.length);
-
k = key;
-
}
-
int z = v[n], y = v[0], delta = 0x9E3779B9, sum = 0, e;
-
int p, q = 6 + 52 / (n + 1);
-
-
while (q-- > 0) {
-
sum = sum + delta;
-
e = sum >>> 2 & 3;
-
for (p = 0; p < n; p++) {
-
y = v[p + 1];
-
z = v[p] += (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4)
-
^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
-
}
-
y = v[0];
-
z = v[n] += (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4)
-
^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
-
}
-
return v;
-
}
-
-
/**
-
* Decrypt data with key.
- *
-
* @param v
-
* @param k
-
* @return
-
*/
-
public static int[] decrypt(int[] v, int[] k) {
-
int n = v.length - 1;
-
-
if (n < 1) {
-
return v;
-
}
-
if (k.length < 4) {
-
int[] key = new int[4];
-
-
System.arraycopy(k, 0, key, 0, k.length);
-
k = key;
-
}
-
int z = v[n], y = v[0], delta = 0x9E3779B9, sum, e;
-
int p, q = 6 + 52 / (n + 1);
-
-
sum = q * delta;
-
while (sum != 0) {
-
e = sum >>> 2 & 3;
-
for (p = n; p > 0; p--) {
-
z = v[p - 1];
-
y = v[p] -= (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4)
-
^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
-
}
-
z = v[n];
-
y = v[0] -= (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4)
-
^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
-
sum = sum - delta;
-
}
-
return v;
-
}
-
-
/**
-
* Convert byte array to int array.
- *
-
* @param data
-
* @param includeLength
-
* @return
-
*/
-
private static int[] toIntArray(byte[] data, boolean includeLength) {
-
int n = (((data.length & 3) == 0)
-
? (data.length >>> 2)
-
: ((data.length >>> 2) + 1));
-
int[] result;
-
-
if (includeLength) {
-
result = new int[n + 1];
-
result[n] = data.length;
-
} else {
-
result = new int[n];
-
}
-
n = data.length;
-
for (int i = 0; i < n; i++) {
-
result[i >>> 2] |= (0x000000ff & data[i]) << ((i & 3) << 3);
-
}
-
return result;
-
}
-
-
/**
-
* Convert int array to byte array.
- *
-
* @param data
-
* @param includeLength
-
* @return
-
*/
-
private static byte[] toByteArray(int[] data, boolean includeLength) {
-
int n = data.length << 2;
-
-
;
-
if (includeLength) {
-
int m = data[data.length - 1];
-
-
if (m > n) {
-
return null;
-
} else {
-
n = m;
-
}
-
}
-
byte[] result = new byte[n];
-
-
for (int i = 0; i < n; i++) {
-
result[i] = (byte) ((data[i >>> 2] >>> ((i & 3) << 3)) & 0xff);
-
}
-
return result;
-
}
-
}
转载自:www.coolcode.cn
分享到:
相关推荐
XXTEA加密算法各种语言实现整理,包括C# delphi java javascript php c actionscript ps
xxtea-java, Java的XXTEA加密算法库 用于 Java 的 XXTEA 简介XXTEA是一种快速安全的加密算法。 这是一个用于Java的XXTEA库。它与原始的XXTEA加密算法不同。 它加密和解密字节 [] 而不是 32bit 整数 array,键也
TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据。TEA特点是速度快、效率高,实现也非常简单。由于针对TEA的攻击不断出现,所以TEA也发展出...
“微型加密算法(TEA)及其相关变种(XTEA,Block TEA,XXTEA)都是分组加密算法,它们很容易被描述,实现也很简单(典型的几行代码)。 TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 ...
C++使用的XXtea加密算法,制造license,简单易用。能够完全使用,欢迎使用。。。。。。。。。。。。。。。。
xxtea 加解密算法 java 实现,
PHP的XXTEA加密算法扩展
XXTEA算法的C#实现和JS实现,可以互相的加密解密,有一个共有私钥。执行效率非常的高,非常适用于WEB解决方案中使用。
一个很小巧的加密算法,加解密速度非常快,也很安全!!
XXTea 加密算法的 Objective-C 包装器_代码_下载
这几日有时间,自己就用XXTEA算法在 SQLite3.3.7版本的基础上实现了加密功能。选择XXTEA主要是因为这个算法速度很快,对性能造成的影响相对较小。顺便修改了网上流传的XXTEA代码的一处内存越界的BUG。 用SQLite的...
这几日有时间,自己就用XXTEA算法在 SQLite3.3.7版本的基础上实现了加密功能。选择XXTEA主要是因为这个算法速度很快,对性能造成的影响相对较小。顺便修改了网上流传的XXTEA代码的一处内存越界的BUG。 用SQLite的...
高于TEA的加密算法,值得使用!破解时间比TEA时间要长。
xxtea-php, PHP的XXTEA加密算法库 用于 PHP 的 XXTEA 简介XXTEA是一种快速安全的加密算法。 这是一个PHP的XXTEA库。它与原始的XXTEA加密算法不同。 它加密和解密字符串而不是 uint32 array,密钥也是字符串。安装
网上很多都不可用,所以自己创新了一下,把DH的用法彻底搞懂了. 源码是直接可以拿来用的.
XXTea 加密类 c#
Python的XXTEA加密算法库
XXTEA算法的C语言实现,内含测试代码,编译后可直接运行
基于Java开发的数据加密解密工具,可对字符串和文件类型进行加密解密,支持AES、DES和3DES三种常用的对称加密算法。
采用openssl1.1.0c,支持xxtea/aes加密解密,选择算法后输入秘钥及签名即可完成加密解密,即可加/解密单个文件,也可以指定加解密一个目录下的所有文件.