MD5

此文为复合型文章:引用+原创

-----------

1.C# MD5 与 java MD5 生成的字符串不一致问题

C# 源码

MD5

 

查了下C#的api ,System.Text.UnicodeEncoding.Unicode.GetBytes(s)用的是utf-16 little-endian编码方式。

 

java 源码

 

public static String getMD5(String str, String encoding) throws Exception {

MessageDigest md = MessageDigest.getInstance("MD5");

md.update(str.getBytes(encoding));

byte[] result = md.digest();

StringBuffer sb = new StringBuffer();

for (int i = 0; i < result.length; i++) {

int val = result[i] & 0xff;

sb.append(Integer.toHexString(val));

}

return sb.toString();

}

 

运行结果

4b98b56b759916acc26268f2792a123

4b98b56b759916acc26268f2792a123

 如果还是有问题,参考这个链接应该就可以解决了:

http://bbs.csdn.net/topics/370127895

 

2.其他的MD5加密方式

public static String md5(String string)
 {
  char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
  'e', 'f' };
  try {
   byte[] bytes = string.getBytes();
   MessageDigest messageDigest = MessageDigest.getInstance("MD5");
   messageDigest.update(bytes);
   byte[] updateBytes = messageDigest.digest();
   int len = updateBytes.length;
   char myChar[] = new char[len * 2];
   int k = 0;
   for (int i = 0; i < len; i++) {
    byte byte0 = updateBytes[i];
    myChar[k++] = hexDigits[byte0 >>> 4 & 0x0f];
    myChar[k++] = hexDigits[byte0 & 0x0f];
   }
  return new String(myChar);
  } catch (Exception e) {
  return null;
  }
 } 

 

3.MD5解密

http://blog.csdn.net/yaba213/article/details/5605111

   写得非常好!!

 

4.附说Java加密与解密

基本的单向加密算法:

  • BASE64 严格地说,属于编码格式,而非加密算法
  • MD5(Message Digest algorithm 5,信息摘要算法)
  • SHA(Secure Hash Algorithm,安全散列算法)
  • HMAC(Hash Message Authentication Code,散列消息鉴别码)

复杂的对称加密(DES、PBE)、非对称加密算法:

  • DES(Data Encryption Standard,数据加密算法)
  • PBE(Password-based encryption,基于密码验证)
  • RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)
  • DH(Diffie-Hellman算法,密钥一致协议)
  • DSA(Digital Signature Algorithm,数字签名)
  • ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)

 

你可能感兴趣的:(MD5加密,md5解密,java与C#的MD5)