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

Java 二次MD5 32位小写加密算法与php页面加密结果相同

最近做的一个项目需要使用MD5加密算法,需要加密的参数有两个。自己先试了几次,算的结果为php页面的不一样,后来与写php页面的同事沟通后,了解到php页面的算法如下:

action = "secondMD5";

key = "VOD_MOVE";

md5($action.$key)

即先使用key进行一次MD5加密,$key = md5("VOD_MOVE")加密结果为:cafa20f4232c530872f9ba796d6eaa84

然后时间key加密得到的结果与action再进行一次加密,即md5("secondMD5cafa20f4232c530872f9ba796d6eaa84")

加密的结果为:b787b45af6b846e7a6850aa5891cf132

容易犯的错误是直接md5("secondMD5VOD_MOVE"),加密结果为:e3c8de32fc29ea803e9615ab348d45b3
这样的算法算出来的结果始终是错误的。一般如果算出来的结果与后台不一致,最好的办法就是即时找到后台工作人员,与其沟通,这样效率会很高。

 

\

下面说一下java的实现吧,直接上代码了,废话就不多说了

 


[html] view plaincopyprint?import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
 
public class Md5 { 
 
    public static void main(String[] args) { 
        String str = encryption("VOD_MOVE"); 
        System.out.println("一次加密Md5(VOD_MOVE)结果:" + str); 
        String string = encryption("secondMD5" + str); 
        System.out.println("二次加密Md5(secondMD5" + str + ")结果:" + string); 
    } 
 
    /** 
     *  
     * @param plain  明文 
     * @return 32位小写密文 
     */ 
    public static String encryption(String plain) { 
        String re_md5 = new String(); 
        try { 
            MessageDigest md = MessageDigest.getInstance("MD5"); 
            md.update(plain.getBytes()); 
            byte b[] = md.digest(); 
 
            int i; 
 
            StringBuffer buf = new StringBuffer(""); 
            for (int offset = 0; offset < b.length; offset++) { 
                i = b[offset]; 
                if (i < 0) 
                    i += 256; 
                if (i < 16) 
                    buf.append("0"); 
                buf.append(Integer.toHexString(i)); 
            } 
 
            re_md5 = buf.toString(); 
 
        } catch (NoSuchAlgorithmException e) { 
            e.printStackTrace(); 
        } 
        return re_md5; 
    } 
 

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Md5 {

 public static void main(String[] args) {
  String str = encryption("VOD_MOVE");
  System.out.println("一次加密Md5(VOD_MOVE)结果:" + str);
  String string = encryption("secondMD5" + str);
  System.out.println("二次加密Md5(secondMD5" + str + ")结果:" + string);
 }

 /**
  *
  * @param plain  明文
  * @return 32位小写密文
  */
 public static String encryption(String plain) {
  String re_md5 = new String();
  try {
   MessageDigest md = MessageDigest.getInstance("MD5");
   md.update(plain.getBytes());
   byte b[] = md.digest();

   int i;

   StringBuffer buf = new StringBuffer("");
   for (int offset = 0; offset < b.length; offset++) {
    i = b[offset];
    if (i < 0)
     i += 256;
    if (i < 16)
     buf.append("0");
    buf.append(Integer.toHexString(i));
   }

   re_md5 = buf.toString();

  } catch (NoSuchAlgorithmException e) {
   e.printStackTrace();
  }
  return re_md5;
 }

}

 


 

补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,