package org.ripple.power.database;
import org.ripple.power.CoinUtils;
/**
* 一个简单的“非专用”彩虹表实现,可以实现“增查”功能,但速度显然无法和专用表媲美。
*
* @author cping
*
*/
public class RainbowTable {
private final HashTable pTable;
public RainbowTable(int size, int minPwLength, int maxPwLength) {
this.pTable = new HashTable(size, minPwLength, maxPwLength);
}
public RainbowTable(int size) {
this(size, 0, 64);
}
public RainbowTable(int size, int length) {
this(size, 0, length);
}
public void addHashString(String key) {
pTable.insert(new HashBytes(CoinUtils.fromHex(key)));
}
public void add(String key) {
pTable.insert(new HashBytes(key.getBytes()));
}
public void add(String key, String value) {
pTable.insert(new HashBytes(key.getBytes()),
new HashBytes(value.getBytes()));
}
public void add(byte[] key) {
pTable.insert(new HashBytes(key));
}
public void add(byte[] key, byte[] value) {
pTable.insert(new HashBytes(key), new HashBytes(value));
}
public boolean find(String key) {
return pTable.contains(new HashBytes(key.getBytes()));
}
public boolean find(byte[] key) {
return pTable.contains(new HashBytes(key));
}
public HashBytes search(String key) {
return pTable.search(new HashBytes(key.getBytes()));
}
public HashBytes search(byte[] key) {
return pTable.search(new HashBytes(key));
}
public static void main(String[] args) {
RainbowTable table = new RainbowTable(4096);
table.add("fdh");
System.out.println(table.find("fdh"));
}
}