📄 sha1.java
字号:
public class sha1 {
private int a = 0x67452301;
private int b = 0xefcdab89;
private int c = 0x98badcfe;
private int d = 0x10325476;
private int e = 0xc3d2e1f0;
private int tmpData[] = new int[80];
private int tmpInt = 0;
public sha1() {
}
private void init() {
a = 0x67452301;
b = 0xefcdab89;
c = 0x98badcfe;
d = 0x10325476;
e = 0xc3d2e1f0;
tmpInt = 0;
for(int i = 0; i < tmpData.length; i++) {
tmpData[i] = 0;
}
}
public void byteToInt(byte byteData[], int i) {
tmpData[tmpInt++] = ((byteData[i] & 0xff)<<24) | ((byteData[i + 1] & 0xff)<<16) | ((byteData[i + 2] & 0xff)<<8) | (byteData[i + 3] & 0xff);
if(tmpInt == 16) {
encrypt();
}
}
private void intToByte(int intValue, byte byteData[], int i) {
byteData[i] = (byte)(intValue>>>24);
byteData[i + 1] = (byte)(intValue>>>16);
byteData[i + 2] = (byte)(intValue>>>8);
byteData[i + 3] = (byte)intValue;
}
public void setLength(long l) {
if(tmpInt > 14) {
encrypt();
}
tmpData[14] = (int)(l>>>32);
tmpData[15] = (int)(l & -1L);
}
public int getResult(byte byteData[]) {
intToByte(a, byteData, 0);
intToByte(b, byteData, 4);
intToByte(c, byteData, 8);
intToByte(d, byteData, 12);
intToByte(e, byteData, 16);
init();
return 20;
}
private int f1(int x, int y, int z) {
return (x & y) | (~x & z);
}
private int f2(int x, int y, int z) {
return x ^ y ^ z;
}
private int f3(int x, int y, int z) {
return (x & y) | (x & z) | (y & z);
}
private int f4(int x, int y) {
return (x<<y) | x>>>(32 - y);
}
public void encrypt() {
for(int i = 16; i <= 79; i++) {
tmpData[i] = f4(tmpData[i - 3] ^ tmpData[i - 8] ^ tmpData[i - 14] ^ tmpData[i - 16], 1);
}
int tmpa = a;
int tmpb = b;
int tmpc = c;
int tmpd = d;
int tmpe = e;
for(int j = 0; j <= 19; j++) {
int tmp = f4(tmpa, 5) + f1(tmpb, tmpc, tmpd) + tmpe + tmpData[j] + 0x5a827999;
tmpe = tmpd;
tmpd = tmpc;
tmpc = f4(tmpb, 30);
tmpb = tmpa;
tmpa = tmp;
}
for(int k = 20; k <= 39; k++) {
int tmp = f4(tmpa, 5) + f2(tmpb, tmpc, tmpd) + tmpe + tmpData[k] + 0x6ed9eba1;
tmpe = tmpd;
tmpd = tmpc;
tmpc = f4(tmpb, 30);
tmpb = tmpa;
tmpa = tmp;
}
for(int l = 40; l <= 59; l++) {
int tmp = f4(tmpa, 5) + f3(tmpb, tmpc, tmpd) + tmpe + tmpData[l] + 0x8f1bbcdc;
tmpe = tmpd;
tmpd = tmpc;
tmpc = f4(tmpb, 30);
tmpb = tmpa;
tmpa = tmp;
}
for(int m = 60; m <= 79; m++) {
int tmp = f4(tmpa, 5) + f2(tmpb, tmpc, tmpd) + tmpe + tmpData[m] + 0xca62c1d6;
tmpe = tmpd;
tmpd = tmpc;
tmpc = f4(tmpb, 30);
tmpb = tmpa;
tmpa = tmp;
}
a += tmpa;
b += tmpb;
c += tmpc;
d += tmpd;
e += tmpe;
tmpInt = 0;
for(int n = 0; n < tmpData.length; n++) {
tmpData[n] = 0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -