当前位置:编程学习 > JAVA >>

MD5加密

C#  public string MD5(string s)
    {
        MD5CryptoServiceProvider MD5CSP = new MD5CryptoServiceProvider();
        byte[] MD5Source = Encoding.UTF8.GetBytes(s);
        byte[] MD5Out = MD5CSP.ComputeHash(MD5Source);
        string ret = Convert.ToBase64String(MD5Out);
        return ret;
    }
MD5加密换成java是怎样的?那位大神教下
加密 java c# byte --------------------编程问答--------------------
from:  http://www.iteye.com/topic/1127319 

MD5 nio的简单版,看你们老是怀疑java慢 

C++ MD5工具验证结果: 

File: K:\Games\World of Warcraft\Data\common.MPQ 
Size: 2226587191 bytes 
Modified: 2008年11月19日 星期三, 12:57:24 
MD5: CD9F9C5523F3BA3866B81CCC74ED6476 


java运行结果,毫秒 
耗时:12672,cd9f9c5523f3ba3866b81ccc74ed6476  
                String hashType = "MD5";
        FileInputStream fStream = null;
        try {
            MessageDigest md5 = MessageDigest.getInstance(hashType);
            fStream = new FileInputStream(
                    //"K:\\Games\\World of Warcraft\\Scan.dll");
                    //"K:\\Games\\World of Warcraft\\Data\\patch-3.MPQ");
                    "K:\\Games\\World of Warcraft\\Data\\common.MPQ");
            FileChannel fChannel = fStream.getChannel();
            ByteBuffer buffer = ByteBuffer.allocate(8*1024);
            long s = System.currentTimeMillis();
            for ( int count = fChannel.read( buffer ); count !=-1 ; count = fChannel.read( buffer )
                ) {
                buffer.flip();
                md5.update( buffer );
                if( !buffer.hasRemaining() ){
                    //System.out.println("count:"+count);
                    buffer.clear();
                }
            }
            s = System.currentTimeMillis() - s;
            System.out.println( "耗时:"+s+","+getString( md5.digest() ) );
            
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                if( fStream!=null )
                    fStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
--------------------编程问答-------------------- import java.security.MessageDigest;

public class MD5Util {
    private static char[] hexDigit = {'0', '1', '2', '3', '4', 
        '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

public static String encode(String str) {
MessageDigest md = null;

try {
md = MessageDigest.getInstance("MD5"); // 换成SHA
byte[] digest = md.digest(str.getBytes());

return byteToHexString(digest);
} catch (Exception e) {
e.printStackTrace();
}

return null;
}

private static String byteToHexString(byte[] digest) {
StringBuffer sb = new StringBuffer();

for (int i = 0; i < digest.length; ++i) {
    sb.append(hexDigit[(digest[i] >> 4) & 0xF]);
    sb.append(hexDigit[digest[i] & 0xF]);
}

return sb.toString();
}

public static void main(String[] args) {
System.out.println(MD5Util.encode("Biao"));
}
}

在PHP中就一句代码: $str = md5("Biao") --------------------编程问答-------------------- 求积分啊求积分啊求积分 --------------------编程问答-------------------- MD5 不是加密。 --------------------编程问答-------------------- 不知道结果是否一样,我去试下,不过还是很感谢大家的帮忙 --------------------编程问答-------------------- C#   public string MD5(string s)
    {
        MD5CryptoServiceProvider MD5CSP = new MD5CryptoServiceProvider();
        byte[] MD5Source = Encoding.UTF8.GetBytes(s);
        byte[] MD5Out = MD5CSP.ComputeHash(MD5Source);
        string ret = Convert.ToBase64String(MD5Out);
        return ret;
    }
换成JAVA先转化成UTF_8再转化成md5码怎么弄啊 ,比如我输入的参数为andi123456出来的结果是s5StGq6gB1P/gmKJl9f31Q== 哪位大哥再帮下阿 !! --------------------编程问答-------------------- C#   public string MD5(string s)
    {
        MD5CryptoServiceProvider MD5CSP = new MD5CryptoServiceProvider();
        byte[] MD5Source = Encoding.UTF8.GetBytes(s);
        byte[] MD5Out = MD5CSP.ComputeHash(MD5Source);
        string ret = Convert.ToBase64String(MD5Out);
        return ret;
    }
换成JAVA先转化成UTF_8再转化成md5码再转化成base64码怎么弄啊 ,比如我输入的参数为andi123456出来的结果是s5StGq6gB1P/gmKJl9f31Q== 哪位大哥再帮下阿 !!  --------------------编程问答--------------------
不知道是不是你想要的


/**
 * TODO 对一段String生成MD5加密信息
 * @param message 要加密的String
 * @return 生成的MD5信息
 * @throws UnsupportedEncodingException
 */
public static String EncoderByMd5(String message) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] b = md.digest(message.getBytes("UTF-8"));
return byteToHexString(b);
} catch (Exception e) {
e.printStackTrace();
return null;
}
} --------------------编程问答-------------------- 这类的加密貌似都很成熟了吧 --------------------编程问答-------------------- MD5是一种编码吧 --------------------编程问答-------------------- 求md5解密算法 --------------------编程问答-------------------- 这个问题最麻烦的不是md5..是base64,需要另外下个包,或者把源代码烤出来

public class Test1 {
public static void main(String[] args) throws Exception{
String content = "andi123456";
MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] data = content.getBytes("utf-8");
data = digest.digest(data);
Base64 base64=new Base64();
data = base64.encode(data);


System.out.println(new String(data));
}
}

class Base64 {
    private static final byte[] encodingTable = {
            (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E',
            (byte) 'F', (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J',
            (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', (byte) 'O',
            (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T',
            (byte) 'U', (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y',
            (byte) 'Z', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd',
            (byte) 'e', (byte) 'f', (byte) 'g', (byte) 'h', (byte) 'i',
            (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n',
            (byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's',
            (byte) 't', (byte) 'u', (byte) 'v', (byte) 'w', (byte) 'x',
            (byte) 'y', (byte) 'z', (byte) '0', (byte) '1', (byte) '2',
            (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7',
            (byte) '8', (byte) '9', (byte) '+', (byte) '/'
        };
    private static final byte[] decodingTable;
    static {
        decodingTable = new byte[128];
        for (int i = 0; i < 128; i++) {
            decodingTable[i] = (byte) -1;
        }
        for (int i = 'A'; i <= 'Z'; i++) {
            decodingTable[i] = (byte) (i - 'A');
        }
        for (int i = 'a'; i <= 'z'; i++) {
            decodingTable[i] = (byte) (i - 'a' + 26);
        }
        for (int i = '0'; i <= '9'; i++) {
            decodingTable[i] = (byte) (i - '0' + 52);
        }
        decodingTable['+'] = 62;
        decodingTable['/'] = 63;
    }
    public static byte[] encode(byte[] data) {
        byte[] bytes;
        int modulus = data.length % 3;
        if (modulus == 0) {
            bytes = new byte[(4 * data.length) / 3];
        } else {
            bytes = new byte[4 * ((data.length / 3) + 1)];
        }
        int dataLength = (data.length - modulus);
        int a1;
        int a2;
        int a3;
        for (int i = 0, j = 0; i < dataLength; i += 3, j += 4) {
            a1 = data[i] & 0xff;
            a2 = data[i + 1] & 0xff;
            a3 = data[i + 2] & 0xff;
            bytes[j] = encodingTable[(a1 >>> 2) & 0x3f];
            bytes[j + 1] = encodingTable[((a1 << 4) | (a2 >>> 4)) & 0x3f];
            bytes[j + 2] = encodingTable[((a2 << 2) | (a3 >>> 6)) & 0x3f];
            bytes[j + 3] = encodingTable[a3 & 0x3f];
        }
        int b1;
        int b2;
        int b3;
        int d1;
        int d2;
        switch (modulus) {
        case 0: /* nothing left to do */
            break;
        case 1:
            d1 = data[data.length - 1] & 0xff;
            b1 = (d1 >>> 2) & 0x3f;
            b2 = (d1 << 4) & 0x3f;
            bytes[bytes.length - 4] = encodingTable[b1];
            bytes[bytes.length - 3] = encodingTable[b2];
            bytes[bytes.length - 2] = (byte) '=';
            bytes[bytes.length - 1] = (byte) '=';
            break;
        case 2:
            d1 = data[data.length - 2] & 0xff;
            d2 = data[data.length - 1] & 0xff;
            b1 = (d1 >>> 2) & 0x3f;
            b2 = ((d1 << 4) | (d2 >>> 4)) & 0x3f;
            b3 = (d2 << 2) & 0x3f;
            bytes[bytes.length - 4] = encodingTable[b1];
            bytes[bytes.length - 3] = encodingTable[b2];
            bytes[bytes.length - 2] = encodingTable[b3];
            bytes[bytes.length - 1] = (byte) '=';
            break;
        }
        return bytes;
    }
    public static byte[] decode(byte[] data) {
        byte[] bytes;
        byte b1;
        byte b2;
        byte b3;
        byte b4;
        data = discardNonBase64Bytes(data);
        if (data[data.length - 2] == '=') {
            bytes = new byte[(((data.length / 4) - 1) * 3) + 1];
        } else if (data[data.length - 1] == '=') {
            bytes = new byte[(((data.length / 4) - 1) * 3) + 2];
        } else {
            bytes = new byte[((data.length / 4) * 3)];
        }
        for (int i = 0, j = 0; i < (data.length - 4); i += 4, j += 3) {
            b1 = decodingTable[data[i]];
            b2 = decodingTable[data[i + 1]];
            b3 = decodingTable[data[i + 2]];
            b4 = decodingTable[data[i + 3]];
            bytes[j] = (byte) ((b1 << 2) | (b2 >> 4));
            bytes[j + 1] = (byte) ((b2 << 4) | (b3 >> 2));
            bytes[j + 2] = (byte) ((b3 << 6) | b4);
        }
        if (data[data.length - 2] == '=') {
            b1 = decodingTable[data[data.length - 4]];
            b2 = decodingTable[data[data.length - 3]];
            bytes[bytes.length - 1] = (byte) ((b1 << 2) | (b2 >> 4));
        } else if (data[data.length - 1] == '=') {
            b1 = decodingTable[data[data.length - 4]];
            b2 = decodingTable[data[data.length - 3]];
            b3 = decodingTable[data[data.length - 2]];
            bytes[bytes.length - 2] = (byte) ((b1 << 2) | (b2 >> 4));
            bytes[bytes.length - 1] = (byte) ((b2 << 4) | (b3 >> 2));
        } else {
            b1 = decodingTable[data[data.length - 4]];
            b2 = decodingTable[data[data.length - 3]];
            b3 = decodingTable[data[data.length - 2]];
            b4 = decodingTable[data[data.length - 1]];
            bytes[bytes.length - 3] = (byte) ((b1 << 2) | (b2 >> 4));
            bytes[bytes.length - 2] = (byte) ((b2 << 4) | (b3 >> 2));
            bytes[bytes.length - 1] = (byte) ((b3 << 6) | b4);
        }
        return bytes;
    }
    public static byte[] decode(String data) {
        byte[] bytes;
        byte b1;
        byte b2;
        byte b3;
        byte b4;
        data = discardNonBase64Chars(data);
        if (data.charAt(data.length() - 2) == '=') {
            bytes = new byte[(((data.length() / 4) - 1) * 3) + 1];
        } else if (data.charAt(data.length() - 1) == '=') {
            bytes = new byte[(((data.length() / 4) - 1) * 3) + 2];
        } else {
            bytes = new byte[((data.length() / 4) * 3)];
        }
        for (int i = 0, j = 0; i < (data.length() - 4); i += 4, j += 3) {
            b1 = decodingTable[data.charAt(i)];
            b2 = decodingTable[data.charAt(i + 1)];
            b3 = decodingTable[data.charAt(i + 2)];
            b4 = decodingTable[data.charAt(i + 3)];
            bytes[j] = (byte) ((b1 << 2) | (b2 >> 4));
            bytes[j + 1] = (byte) ((b2 << 4) | (b3 >> 2));
            bytes[j + 2] = (byte) ((b3 << 6) | b4);
        }
        if (data.charAt(data.length() - 2) == '=') {
            b1 = decodingTable[data.charAt(data.length() - 4)];
            b2 = decodingTable[data.charAt(data.length() - 3)];
            bytes[bytes.length - 1] = (byte) ((b1 << 2) | (b2 >> 4));
        } else if (data.charAt(data.length() - 1) == '=') {
            b1 = decodingTable[data.charAt(data.length() - 4)];
            b2 = decodingTable[data.charAt(data.length() - 3)];
            b3 = decodingTable[data.charAt(data.length() - 2)];
            bytes[bytes.length - 2] = (byte) ((b1 << 2) | (b2 >> 4));
            bytes[bytes.length - 1] = (byte) ((b2 << 4) | (b3 >> 2));
        } else {
            b1 = decodingTable[data.charAt(data.length() - 4)];
            b2 = decodingTable[data.charAt(data.length() - 3)];
            b3 = decodingTable[data.charAt(data.length() - 2)];
            b4 = decodingTable[data.charAt(data.length() - 1)];
            bytes[bytes.length - 3] = (byte) ((b1 << 2) | (b2 >> 4));
            bytes[bytes.length - 2] = (byte) ((b2 << 4) | (b3 >> 2));
            bytes[bytes.length - 1] = (byte) ((b3 << 6) | b4);
        }
        return bytes;
    }
    private static byte[] discardNonBase64Bytes(byte[] data) {
        byte[] temp = new byte[data.length];
        int bytesCopied = 0;
        for (int i = 0; i < data.length; i++) {
            if (isValidBase64Byte(data[i])) {
                temp[bytesCopied++] = data[i];
            }
        }
        byte[] newData = new byte[bytesCopied];
        System.arraycopy(temp, 0, newData, 0, bytesCopied);
        return newData;
    }
    private static String discardNonBase64Chars(String data) {
        StringBuffer sb = new StringBuffer();
        int length = data.length();
        for (int i = 0; i < length; i++) {
            if (isValidBase64Byte((byte) (data.charAt(i)))) {
                sb.append(data.charAt(i));
            }
        }
        return sb.toString();
    }
    private static boolean isValidBase64Byte(byte b) {
        if (b == '=') {
            return true;
        } else if ((b < 0) || (b >= 128)) {
            return false;
        } else if (decodingTable[b] == -1) {
            return false;
        }
        return true;
    }
    
}



输出:s5StGq6gB1P/gmKJl9f31Q== --------------------编程问答-------------------- 几篇博客也许对你有点帮助http://blog.csdn.net/tianyazaiheruan/article/category/1260431
--------------------编程问答--------------------
引用 11 楼 yktd26 的回复:
求md5解密算法

哥哥,MD5是不可逆的,哪来的解密算法??
补充:Java ,  Eclipse
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,