📄 sha1simple.java
字号:
w1 = w14 ^ w9 ^ w3 ^ w1;
w1 = w1 << 1 | w1 >>> 31;
a += (b << 5 | b >>> 27) + w1 + (c & d | c & e | d & e) + 0x8f1bbcdc;
c = c << 30 | c >>> 2;
w2 = w15 ^ w10 ^ w4 ^ w2;
w2 = w2 << 1 | w2 >>> 31;
e += (a << 5 | a >>> 27) + w2 + (b & c | b & d | c & d) + 0x8f1bbcdc;
b = b << 30 | b >>> 2;
w3 = w0 ^ w11 ^ w5 ^ w3;
w3 = w3 << 1 | w3 >>> 31;
d += (e << 5 | e >>> 27) + w3 + (a & b | a & c | b & c) + 0x8f1bbcdc;
a = a << 30 | a >>> 2;
w4 = w1 ^ w12 ^ w6 ^ w4;
w4 = w4 << 1 | w4 >>> 31;
c += (d << 5 | d >>> 27) + w4 + (e & a | e & b | a & b) + 0x8f1bbcdc;
e = e << 30 | e >>> 2;
w5 = w2 ^ w13 ^ w7 ^ w5;
w5 = w5 << 1 | w5 >>> 31;
b += (c << 5 | c >>> 27) + w5 + (d & e | d & a | e & a) + 0x8f1bbcdc;
d = d << 30 | d >>> 2;
w6 = w3 ^ w14 ^ w8 ^ w6;
w6 = w6 << 1 | w6 >>> 31;
a += (b << 5 | b >>> 27) + w6 + (c & d | c & e | d & e) + 0x8f1bbcdc;
c = c << 30 | c >>> 2;
w7 = w4 ^ w15 ^ w9 ^ w7;
w7 = w7 << 1 | w7 >>> 31;
e += (a << 5 | a >>> 27) + w7 + (b & c | b & d | c & d) + 0x8f1bbcdc;
b = b << 30 | b >>> 2;
w8 = w5 ^ w0 ^ w10 ^ w8;
w8 = w8 << 1 | w8 >>> 31;
d += (e << 5 | e >>> 27) + w8 + (a & b | a & c | b & c) + 0x8f1bbcdc;
a = a << 30 | a >>> 2;
w9 = w6 ^ w1 ^ w11 ^ w9;
w9 = w9 << 1 | w9 >>> 31;
c += (d << 5 | d >>> 27) + w9 + (e & a | e & b | a & b) + 0x8f1bbcdc;
e = e << 30 | e >>> 2;
w10 = w7 ^ w2 ^ w12 ^ w10;
w10 = w10 << 1 | w10 >>> 31;
b += (c << 5 | c >>> 27) + w10 + (d & e | d & a | e & a) + 0x8f1bbcdc;
d = d << 30 | d >>> 2;
w11 = w8 ^ w3 ^ w13 ^ w11;
w11 = w11 << 1 | w11 >>> 31;
a += (b << 5 | b >>> 27) + w11 + (c & d | c & e | d & e) + 0x8f1bbcdc;
c = c << 30 | c >>> 2;
w12 = w9 ^ w4 ^ w14 ^ w12;
w12 = w12 << 1 | w12 >>> 31;
e += (a << 5 | a >>> 27) + w12 + (b ^ c ^ d) + 0xca62c1d6;
b = b << 30 | b >>> 2;
w13 = w10 ^ w5 ^ w15 ^ w13;
w13 = w13 << 1 | w13 >>> 31;
d += (e << 5 | e >>> 27) + w13 + (a ^ b ^ c) + 0xca62c1d6;
a = a << 30 | a >>> 2;
w14 = w11 ^ w6 ^ w0 ^ w14;
w14 = w14 << 1 | w14 >>> 31;
c += (d << 5 | d >>> 27) + w14 + (e ^ a ^ b) + 0xca62c1d6;
e = e << 30 | e >>> 2;
w15 = w12 ^ w7 ^ w1 ^ w15;
w15 = w15 << 1 | w15 >>> 31;
b += (c << 5 | c >>> 27) + w15 + (d ^ e ^ a) + 0xca62c1d6;
d = d << 30 | d >>> 2;
w0 = w13 ^ w8 ^ w2 ^ w0;
w0 = w0 << 1 | w0 >>> 31;
a += (b << 5 | b >>> 27) + w0 + (c ^ d ^ e) + 0xca62c1d6;
c = c << 30 | c >>> 2;
w1 = w14 ^ w9 ^ w3 ^ w1;
w1 = w1 << 1 | w1 >>> 31;
e += (a << 5 | a >>> 27) + w1 + (b ^ c ^ d) + 0xca62c1d6;
b = b << 30 | b >>> 2;
w2 = w15 ^ w10 ^ w4 ^ w2;
w2 = w2 << 1 | w2 >>> 31;
d += (e << 5 | e >>> 27) + w2 + (a ^ b ^ c) + 0xca62c1d6;
a = a << 30 | a >>> 2;
w3 = w0 ^ w11 ^ w5 ^ w3;
w3 = w3 << 1 | w3 >>> 31;
c += (d << 5 | d >>> 27) + w3 + (e ^ a ^ b) + 0xca62c1d6;
e = e << 30 | e >>> 2;
w4 = w1 ^ w12 ^ w6 ^ w4;
w4 = w4 << 1 | w4 >>> 31;
b += (c << 5 | c >>> 27) + w4 + (d ^ e ^ a) + 0xca62c1d6;
d = d << 30 | d >>> 2;
w5 = w2 ^ w13 ^ w7 ^ w5;
w5 = w5 << 1 | w5 >>> 31;
a += (b << 5 | b >>> 27) + w5 + (c ^ d ^ e) + 0xca62c1d6;
c = c << 30 | c >>> 2;
w6 = w3 ^ w14 ^ w8 ^ w6;
w6 = w6 << 1 | w6 >>> 31;
e += (a << 5 | a >>> 27) + w6 + (b ^ c ^ d) + 0xca62c1d6;
b = b << 30 | b >>> 2;
w7 = w4 ^ w15 ^ w9 ^ w7;
w7 = w7 << 1 | w7 >>> 31;
d += (e << 5 | e >>> 27) + w7 + (a ^ b ^ c) + 0xca62c1d6;
a = a << 30 | a >>> 2;
w8 = w5 ^ w0 ^ w10 ^ w8;
w8 = w8 << 1 | w8 >>> 31;
c += (d << 5 | d >>> 27) + w8 + (e ^ a ^ b) + 0xca62c1d6;
e = e << 30 | e >>> 2;
w9 = w6 ^ w1 ^ w11 ^ w9;
w9 = w9 << 1 | w9 >>> 31;
b += (c << 5 | c >>> 27) + w9 + (d ^ e ^ a) + 0xca62c1d6;
d = d << 30 | d >>> 2;
w10 = w7 ^ w2 ^ w12 ^ w10;
w10 = w10 << 1 | w10 >>> 31;
a += (b << 5 | b >>> 27) + w10 + (c ^ d ^ e) + 0xca62c1d6;
c = c << 30 | c >>> 2;
w11 = w8 ^ w3 ^ w13 ^ w11;
w11 = w11 << 1 | w11 >>> 31;
e += (a << 5 | a >>> 27) + w11 + (b ^ c ^ d) + 0xca62c1d6;
b = b << 30 | b >>> 2;
w12 = w9 ^ w4 ^ w14 ^ w12;
w12 = w12 << 1 | w12 >>> 31;
d += (e << 5 | e >>> 27) + w12 + (a ^ b ^ c) + 0xca62c1d6;
a = a << 30 | a >>> 2;
w13 = w10 ^ w5 ^ w15 ^ w13;
w13 = w13 << 1 | w13 >>> 31;
c += (d << 5 | d >>> 27) + w13 + (e ^ a ^ b) + 0xca62c1d6;
e = e << 30 | e >>> 2;
w14 = w11 ^ w6 ^ w0 ^ w14;
w14 = w14 << 1 | w14 >>> 31;
b += (c << 5 | c >>> 27) + w14 + (d ^ e ^ a) + 0xca62c1d6;
d = d << 30 | d >>> 2;
w15 = w12 ^ w7 ^ w1 ^ w15;
w15 = w15 << 1 | w15 >>> 31;
a += (b << 5 | b >>> 27) + w15 + (c ^ d ^ e) + 0xca62c1d6;
c = c << 30 | c >>> 2;
h0 += a;
h1 += b;
h2 += c;
h3 += d;
h4 += e;
}
public byte[] calculateHash(byte buffer[])
{
return calculateHash(buffer, 0, buffer.length);
}
public byte[] calculateHash(byte buffer[], int offset, int length)
{
h0 = 0x67452301;
h1 = 0xefcdab89;
h2 = 0x98badcfe;
h3 = 0x10325476;
h4 = 0xc3d2e1f0;
int pos = offset;
int rem;
for (rem = length; rem >= 64; rem -= 64)
{
transform(buffer, pos);
pos += 64;
}
if (rem > 0)
{
System.arraycopy(buffer, pos, temp, 0, rem);
pos = rem;
} else
{
pos = 0;
}
temp[pos++] = -128;
if (pos > 56)
{
for (int i = pos; i < 64; i++)
temp[i] = 0;
transform(temp, 0);
pos = 0;
}
for (int i = pos; i < 56; i++)
temp[i] = 0;
long l = length << 3;
temp[56] = (byte)(int)(l >> 56);
temp[57] = (byte)(int)(l >> 48);
temp[58] = (byte)(int)(l >> 40);
temp[59] = (byte)(int)(l >> 32);
temp[60] = (byte)(int)(l >> 24);
temp[61] = (byte)(int)(l >> 16);
temp[62] = (byte)(int)(l >> 8);
temp[63] = (byte)(int)l;
transform(temp, 0);
byte result[] = new byte[20];
result[0] = (byte)(h0 >> 24);
result[1] = (byte)(h0 >> 16);
result[2] = (byte)(h0 >> 8);
result[3] = (byte)(h0 >> 0);
result[4] = (byte)(h1 >> 24);
result[5] = (byte)(h1 >> 16);
result[6] = (byte)(h1 >> 8);
result[7] = (byte)(h1 >> 0);
result[8] = (byte)(h2 >> 24);
result[9] = (byte)(h2 >> 16);
result[10] = (byte)(h2 >> 8);
result[11] = (byte)(h2 >> 0);
result[12] = (byte)(h3 >> 24);
result[13] = (byte)(h3 >> 16);
result[14] = (byte)(h3 >> 8);
result[15] = (byte)(h3 >> 0);
result[16] = (byte)(h4 >> 24);
result[17] = (byte)(h4 >> 16);
result[18] = (byte)(h4 >> 8);
result[19] = (byte)(h4 >> 0);
return result;
}
public static void main(String args[])
{
SHA1Hasher s1 = new SHA1Hasher();
SHA1Simple s2 = new SHA1Simple();
Random r = new Random();
for (int i = 0; i < 10000; i++)
{
int len = r.nextInt(32);
byte x[] = new byte[len];
r.nextBytes(x);
byte h1[] = s1.calculateHash(x);
byte h2[] = s2.calculateHash(x);
if (Arrays.equals(h1, h2))
{
System.out.println((new StringBuilder()).append(ByteFormatter.nicePrint(h1)).append(" - ").append(ByteFormatter.nicePrint(x)).toString());
} else
{
System.out.println("arghh");
return;
}
}
System.out.println("End");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -