| 
 
 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档  
 
  
一、PHP sha1方法 
sha1() 函数计算字符串的 SHA-1 散列。  
sha1() 函数使用美国 Secure Hash 算法 1。  
如果成功,则返回所计算的 SHA-1 散列,如果失败,则返回 false。  
| 参数 | 描述 | 
|---|
 | string | 必需。规定要计算的字符串。 |  | raw | 可选。规定十六进制或二进制输出格式: 
 - TRUE - 原始 20 字符二进制格式
  - FALSE - 默认。40 字符十六进制数
注释:该参数是 PHP 5.0 中添加的。  
  |   
二、当raw为true 
<?php
	$str = sha1("我们");
	echo($str);
	
	
?>
  
<?php
	$str_true = sha1("我们", TRUE);
	echo($str_true);
	
?>
  
当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 java.io.*;
class test  
{
	public static void main (String[] args) throws java.lang.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];
        
        int i = 0;
        for (String tempStr : strAry) {
            String a16 = hexStringToBinary(tempStr);
            int charIndex = binaryToAlgorism(a16);
            
            if (charIndex > 127){
                charAry[i] = '�'; 
            }else{
                char b = (char)charIndex;
                charAry[i] = b;
            } 
            i++;
        } 
        return String.valueOf(charAry);
    } 
	
	 
    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;
    } 
    
    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;
    }
 
    
    public static String hexStringToBinary(String hex) {
        hex = hex.toUpperCase();
        String result = "";
        int max = hex.length();
        for (int i = 0; i < max; i++) {
            char 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;
    }
}
  
四、说明 
没有做测试,没有做测试,没有做测试。 
                
                
                
        
    
 
 |