sha1加密java_用java做的SHA1加密算法 - Java / Java相关

publicclassSHA1 {privatefinalint[] abcde={0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0};//摘要数据存储数组privateint[] digestInt=newint[5];//计算过程中的临时数据存储数组privateint[] tmpData=newint[80];//计算sha-1摘要privateintprocess_input_bytes(byte[] bytedata) {//初试化常量System.arraycopy(abcde,0, digestInt,0, abcde.length);//格式化输入字节数组,补10及长度数据byte[] newbyte=byteArrayFormatData(bytedata);//获取数据摘要计算的数据单元个数intMCount=newbyte.length/64;//循环对每个数据单元进行摘要计算for(intpos=0; pos

tmpData[j]=byteArrayToInt(newbyte, (pos*64)+(j*4));

}//摘要计算函数encrypt();

}return20;

}//格式化输入字节数组格式privatebyte[] byteArrayFormatData(byte[] bytedata) {//补0数量intzeros=0;//补位后总位数intsize=0;//原始数据长度intn=bytedata.length;//模64后的剩余位数intm=n%64;//计算添加0的个数以及添加10后的总长度if(m<56) {

zeros=55-m;

size=n-m+64;

}elseif(m==56) {

zeros=63;

size=n+8+64;

}else{

zeros=63-m+56;

size=(n+64)-m+64;

}//补位后生成的新数组内容byte[] newbyte=newbyte[size];//复制数组的前面部分System.arraycopy(bytedata,0, newbyte,0, n);//获得数组Append数据元素的位置intl=n;//补1操作newbyte[l++]=(byte)0x80;//补0操作for(inti=0; i

newbyte[l++]=(byte)0x00;

}//计算数据长度,补数据长度位共8字节,长整型longN=(long) n*8;byteh8=(byte) (N&0xFF);byteh7=(byte) ((N>>8)&0xFF);byteh6=(byte) ((N>>16)&0xFF);byteh5=(byte) ((N>>24)&0xFF);byteh4=(byte) ((N>>32)&0xFF);byteh3=(byte) ((N>>40)&0xFF);byteh2=(byte) ((N>>48)&0xFF);byteh1=(byte) (N>>56);

newbyte[l++]=h1;

newbyte[l++]=h2;

newbyte[l++]=h3;

newbyte[l++]=h4;

newbyte[l++]=h5;

newbyte[l++]=h6;

newbyte[l++]=h7;

newbyte[l++]=h8;returnnewbyte;

}privateintf1(intx,inty,intz) {return(x&y)|(~x&z);

}privateintf2(intx,inty,intz) {returnx^y^z;

}privateintf3(intx,inty,intz) {return(x&y)|(x&z)|(y&z);

}privateintf4(intx,inty) {return(x<>>(32-y);

}//单元摘要计算函数privatevoidencrypt() {for(inti=16; i<=79; i++) {

tmpData[i]=f4(tmpData[i-3]^tmpData[i-8]^tmpData[i-14]^tmpData[i-16],1);

}int[] tmpabcde=newint[5];for(inti1=0; i1

tmpabcde[i1]=digestInt[i1];

}for(intj=0; j<=19; j++) {inttmp=f4(tmpabcde[0],5)+f1(tmpabcde[1], tmpabcde[2], tmpabcde[3])+tmpabcde[4]+tmpData[j]+0x5a827999;

tmpabcde[4]=tmpabcde[3];

tmpabcde[3]=tmpabcde[2];

tmpabcde[2]=f4(tmpabcde[1],30);

tmpabcde[1]=tmpabcde[0];

tmpabcde[0]=tmp;

}for(intk=20; k<=39; k++) {inttmp=f4(tmpabcde[0],5)+f2(tmpabcde[1], tmpabcde[2], tmpabcde[3])+tmpabcde[4]+tmpData[k]+0x6ed9eba1;

tmpabcde[4]=tmpabcde[3];

tmpabcde[3]=tmpabcde[2];

tmpabcde[2]=f4(tmpabcde[1],30);

tmpabcde[1]=tmpabcde[0];

tmpabcde[0]=tmp;

}for(intl=40; l<=59; l++) {inttmp=f4(tmpabcde[0],5)+f3(tmpabcde[1], tmpabcde[2], tmpabcde[3])+tmpabcde[4]+tmpData[l]+0x8f1bbcdc;

tmpabcde[4]=tmpabcde[3];

tmpabcde[3]=tmpabcde[2];

tmpabcde[2]=f4(tmpabcde[1],30);

tmpabcde[1]=tmpabcde[0];

tmpabcde[0]=tmp;

}for(intm=60; m<=79; m++) {inttmp=f4(tmpabcde[0],5)+f2(tmpabcde[1], tmpabcde[2], tmpabcde[3])+tmpabcde[4]+tmpData[m]+0xca62c1d6;

tmpabcde[4]=tmpabcde[3];

tmpabcde[3]=tmpabcde[2];

tmpabcde[2]=f4(tmpabcde[1],30);

tmpabcde[1]=tmpabcde[0];

tmpabcde[0]=tmp;

}for(inti2=0; i2

digestInt[i2]=digestInt[i2]+tmpabcde[i2];

}for(intn=0; n

tmpData[n]=0;

}

}//4字节数组转换为整数privateintbyteArrayToInt(byte[] bytedata,inti) {return((bytedata[i]&0xff)<<24)|((bytedata[i+1]&0xff)<<16)|((bytedata[i+2]&0xff)<<8)|(bytedata[i+3]&0xff);

}//整数转换为4字节数组privatevoidintToByteArray(intintValue,byte[] byteData,inti) {

byteData[i]=(byte) (intValue>>>24);

byteData[i+1]=(byte) (intValue>>>16);

byteData[i+2]=(byte) (intValue>>>8);

byteData[i+3]=(byte) intValue;

}//将字节转换为十六进制字符串privatestaticString byteToHexString(byteib) {char[] Digit={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};char[] ob=newchar[2];

ob[0]=Digit[(ib>>>4)&0X0F];

ob[1]=Digit[ib&0X0F];

String s=newString(ob);returns;

}//将字节数组转换为十六进制字符串privatestaticString byteArrayToHexString(byte[] bytearray) {

String strDigest="";for(inti=0; i

strDigest+=byteToHexString(bytearray[i]);

}returnstrDigest;

}//计算sha-1摘要,返回相应的字节数组publicbyte[] getDigestOfBytes(byte[] byteData) {

process_input_bytes(byteData);byte[] digest=newbyte[20];for(inti=0; i

intToByteArray(digestInt[i], digest, i*4);

}returndigest;

}//计算sha-1摘要,返回相应的十六进制字符串publicString getDigestOfString(byte[] byteData) {returnbyteArrayToHexString(getDigestOfBytes(byteData));

}publicstaticvoidmain(String[] args) {

String data="1";

System.out.println(data);

String digest=newSHA1().getDigestOfString(data.getBytes());

System.out.println(digest);

}

}


版权声明:本文为weixin_39835925原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。