JAVA实现PHP⽅法sha1(““,true)提⽰:⽂章写完后,⽬录可以⾃动⽣成,如何⽣成可参考右边的帮助⽂档
⽂章⽬录
⼀、PHP sha1⽅法
sha1() 函数计算字符串的 SHA-1 散列。
sha1() 函数使⽤美国 Secure Hash 算法 1。
如果成功,则返回所计算的 SHA-1 散列,如果失败,则返回 false。
⼆、当raw为true
<?php
$str=sha1("我们");
echo($str);
//结果为:0805949359741ce14fe90402b25e2e023f449748
>
<?php
$str_true=sha1("我们",TRUE);
echo($str_true);
//结果为:��Yt�O��^.?D�H
>
当raw为true时,其实就是对⼗六进制串⼜做了⼀系列转换。
上述结果 str_true 其实就是对 str 得⼀系列转换。
如何转换:
上述结果 str 为 40 字符⼗六进制数 字符串
将 40 位 16进制 字符串按照两两为⼀组,分割成 20 组 16进制 的字符串:
08,05,94,93,59,74,1c,e1,4f,e9,04,02,b2,5e,2e,02,3f,44,97,48
将每⼀组 16进制 的数值转换成为 10进制 数值:
08,05,148,147,89,116…
对照 ASCII 码表 进⾏翻译出最终的原始⼆进制字符串。
(对与匹配到⾮打印控制字符显⽰为空,超过127显⽰为�)
三、JAVA转换
代码如下(⽰例):
import*;
class test
{
public static void main (String[] args)throws Exception
{
String str ="0805949359741ce14fe90402b25e2e023f449748";
String asciiStr =convertedBinaryString(str);
System.out.println(asciiStr);
}
public static String convertedBinaryString(String str){
String[] strAry =getHexadecimalArray(str);
char[] charAry =new char[20];
//char[] charAry = new char[strAry.lenght]; 这么写会报错不知道为什么
int i =0;
for(String tempStr : strAry){
String a16 =hexStringToBinary(tempStr);
int charIndex =binaryToAlgorism(a16);
//超过127 java显⽰了ascii得扩展表这⾥处理⼀下
if(charIndex >127){
charAry[i]='�';//这个其实和上⾯得那个字符⼀样,显⽰不同。可能是编码问题。
}else{
char b =(char)charIndex;
charAry[i]= b;
}
i++;
}
return String.valueOf(charAry);
}
/**
* 分割字符串为数组
* 两两为⼀组
* @param str ⼗六进制字符串
* @return ⼗六进制数字符串数组
*/
public static String[]getHexadecimalArray(String str){
int arylength = str.length()/2;
String[] hexAry =new String[arylength];
for(int i =0; i < hexAry.length; i++){
hexAry[i]= str.substring(i *2, i *2+2);
}
return hexAry;
}
/**
* ⼆进制字符串转⼗进制
*
* @param binary
*            ⼆进制字符串
* @return ⼗进制数值
*/
public static int binaryToAlgorism(String binary){
int max = binary.length();
int result =0;
for(int i = max; i >0; i--){
char c = binary.charAt(i -1);
int algorism = c -'0';
result += Math.pow(2, max - i)* algorism;
}
return result;
}
/**
* ⼗六转⼆进制
* ⼗六转⼆进制
*
* @param hex
*            ⼗六进制字符串
* @return ⼆进制字符串
*/
public static String hexStringToBinary(String hex){        hex = UpperCase();
String result ="";
int max = hex.length();
for(int i =0; i < max; i++){
国外java phpchar c = hex.charAt(i);
switch(c){
case'0':
result +="0000";
break;
case'1':
result +="0001";
break;
case'2':
result +="0010";
break;
case'3':
result +="0011";
break;
case'4':
result +="0100";
break;
case'5':
result +="0101";
break;
case'6':
result +="0110";
break;
case'7':
result +="0111";
break;
case'8':
result +="1000";
break;
case'9':
result +="1001";
break;
case'A':
result +="1010";
break;
case'B':
result +="1011";
break;
case'C':
result +="1100";
break;
case'D':
result +="1101";
break;
case'E':
result +="1110";
break;
case'F':
result +="1111";
break;
}
}
return result;
}
}
四、说明
没有做测试,没有做测试,没有做测试。