package org.springside.modules.utils.text;
import static org.assertj.core.api.Assertions.*;
import java.io.IOException;
import java.io.InputStream;
import org.junit.Test;
import org.springside.modules.utils.io.ResourceUtil;
public class HashUtilTest {
@Test
public void hashSha1() {
// 普通
String result = EncodeUtil.encodeBase64(HashUtil.sha1("hhahah"));
System.out.println("sha1:" + result);
assertThat(result).isEqualTo("sCtJLx2IJNto032AhdkP64t/os4=");
String result2 = EncodeUtil.encodeBase64(HashUtil.sha1("hhahah".getBytes()));
assertThat(result).isEqualTo("sCtJLx2IJNto032AhdkP64t/os4=");
// 带盐, 每次salt值不一样,所以值也不一样。
result = EncodeUtil.encodeBase64(HashUtil.sha1("hhahah", HashUtil.generateSalt(5)));
System.out.println("sha1 with salt:" + result);
// 带盐,固定的盐
result = EncodeUtil.encodeBase64(HashUtil.sha1("hhahah", new byte[] { 1, 2, 3 }));
assertThat(result).isEqualTo("U/7wy5R1sVrjEf3dOTAPz383g2k=");
result2 = EncodeUtil.encodeBase64(HashUtil.sha1("hhahah".getBytes(), new byte[] { 1, 2, 3 }));
assertThat(result).isEqualTo(result2);
// 带盐迭代, 每次salt值不一样,所以值也不一样。
result = EncodeUtil.encodeBase64(HashUtil.sha1("hhahah", HashUtil.generateSalt(5), 2));
System.out.println("sha1 with salt with iteration:" + result);
// 带盐迭代, 固定的盐
result = EncodeUtil.encodeBase64(HashUtil.sha1("hhahah", new byte[] { 1, 2, 3 }, 2));
assertThat(result).isEqualTo("n9O7laits+ovoK8X8xde+XrsCtM=");
result2 = EncodeUtil.encodeBase64(HashUtil.sha1("hhahah".getBytes(), new byte[] { 1, 2, 3 }, 2));
assertThat(result).isEqualTo(result2);
}
@Test
public void hashFile() throws IOException {
InputStream in = ResourceUtil.asStream("test.txt");
String result = EncodeUtil.encodeBase64(HashUtil.sha1File(in));
assertThat(result).isEqualTo("DmSnwK/Fl0Jplrwtm9tfi7cb/js=");
result = EncodeUtil.encodeBase64(HashUtil.md5File(in));
assertThat(result).isEqualTo("1B2M2Y8AsgTpgAmY7PhCfg==");
}
@Test
public void crc32() {
assertThat(HashUtil.crc32AsInt("hahhha1")).isEqualTo(-625925593);
assertThat(HashUtil.crc32AsInt("hahhha1".getBytes())).isEqualTo(-625925593);
assertThat(HashUtil.crc32AsInt("hahhha2")).isEqualTo(1136161693);
assertThat(HashUtil.crc32AsLong("hahhha1")).isEqualTo(3669041703L);
assertThat(HashUtil.crc32AsLong("hahhha1".getBytes())).isEqualTo(3669041703L);
assertThat(HashUtil.crc32AsLong("hahhha2")).isEqualTo(1136161693L);
}
@Test
public void murmurhash() {
assertThat(HashUtil.murmur32AsInt("hahhha1")).isEqualTo(-1920794701);
assertThat(HashUtil.murmur32AsInt("hahhha1".getBytes())).isEqualTo(-1920794701);
assertThat(HashUtil.murmur32AsInt("hahhha2")).isEqualTo(2065789419);
assertThat(HashUtil.murmur32AsInt("hahhha3")).isEqualTo(-293065542);
assertThat(HashUtil.murmur32AsInt("hahhha4")).isEqualTo(-2003559207);
assertThat(HashUtil.murmur32AsInt("hahhha5")).isEqualTo(-3887993);
assertThat(HashUtil.murmur32AsInt("hahhha6")).isEqualTo(-446760132);
assertThat(HashUtil.murmur128AsLong("hahhha6")).isEqualTo(-5203515929515563680L);
assertThat(HashUtil.murmur128AsLong("hahhha6".getBytes(Charsets.UTF_8))).isEqualTo(-5203515929515563680L);
}
}