关于php MD5加密 与java MD5 加密结果不一致的问题

针对PHP不是UTF-8编码导致的问题

public String md5(String txt) {
             try{
                  MessageDigest md = MessageDigest.getInstance("MD5");
                  md.update(txt.getBytes("GBK"));    //问题主要出在这里,Java的字符串是unicode编码,不受源码文件的编码影响;而PHP的编码是和源码文件的编码一致,受源码编码影响。
                  StringBuffer buf=new StringBuffer();            
                  for(byte b:md.digest()){
                       buf.append(String.format("%02x", b&0xff));        
                  }
                 return  buf.toString();
               }catch( Exception e ){
                   e.printStackTrace();

return null;
                }
        }

或者直接使用PHP加密出来提供给JAVA使用

1、搭建好php的环境(不作介绍),写一个通过提取get参数,并对值进行md5加密的页面,如下

   <?php echo strtoupper(md5($_GET["md5str"])); ?>

strtoupper是字母大写转换的函数

md5是MD5加密的函数

$_GET["md5str"]就是通过url带一个md5str的参数,把值获取并打印出来

2、JAVA页面的提交方法

/**
     * 用于做PHP的提交处理
     * @param url
     */
    public static String phpRequest(String url){
        try{
            HttpClient client = new HttpClient();
            PostMethod post = new PostMethod(url);//使用POST方式提交数据
            post.setRequestHeader("Content-Type","text/html; charset=UTF-8");
            client.executeMethod(post);
            String response = new String(post.getResponseBodyAsString().getBytes("8859_1"), "UTF-8");//打印结果页面
            post.releaseConnection();
            return response;
        } catch(IOException e){
            e.printStackTrace();
            return null;
        }
    }

需要提示的是,url记得先对中文参数进行一次UTF-8的编码再传到这个方法里面,这个方法对响应的结果做了反编码的处理,最后就能正确的返回php MD5加密后的值了!

时间: 2024-10-13 11:14:26

关于php MD5加密 与java MD5 加密结果不一致的问题的相关文章

javascript md5 二次加密 和 java md5 二次加密结果不同

最近研究httpclient post 时遇到了一个问题,很费解. js  md5(str) 和 java md5(str),第一次md5 加密结果一样,(当时忽略了大小写问题,java 大写,js小写). 但是 js      md5( md5(str) ), java   md5( md5(str) ) 也就是说第二次 md5 加密确又不一样了. 当时很无语,第一次一样,第二次为什么又 不一样了呢? 原来是大小写问题,md5 加密,都是网上找的代码,第一次md5加密,java返回结果是大写,

MD5加密的Java实现

在各种应用系统中,如果需要设置账户,那么就会涉及到储存用户账户信息的问题,为了保证所储存账户信息的安全,通常会采用MD5加密的方式来,进行储存.首先,简单得介绍一下,什么是MD5加密. MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2.MD3和MD4发展而来.是让大容量信息在用数字

MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能

MD5工具类,提供字符串MD5加密(校验).文件MD5值获取(校验)功能 : package com.yzu.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.security.MessageDigest; impor

【OBJC类扩展之MD5加密】NSString+MD5

#import<Foundation/Foundation.h> @interface NSString (md5) - (NSString *) md5; @end #import "NSString+MD5.h" #import<CommonCrypto/CommonDigest.h> @implementation NSString (md5) - (NSString *) md5 { const char *cStr = [selfUTF8String]

MD5加密(java和c#)

java代码 public static String md5(String str) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(str.getBytes()); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset <

Java之 SHA1 与MD5加密

一.SHA1加密 1 /* 2 * SHA1加密,结果为小写 3 */ 4 public static String SHA1(String decript) { 5 try { 6 MessageDigest digest = java.security.MessageDigest 7 .getInstance("SHA-1"); 8 digest.update(decript.getBytes()); 9 byte messageDigest[] = digest.digest()

Java 语言实现 MD5 加密

Java 语言实现 MD5 加密 背景说明 在实际项目中,为了安全性考虑,经常要求账号密码是以加密后的密文形式,保存到数据库中. 这样,即使有人获取到了数据库中的密文密码,也不知道明文密码信息是什么,从而防止系统被恶意访问. 密码加密有很多种方式,比如:Base64,DSA,RSA,MD5,SHA128,SHA256,SHA512等加密方式. 本文主要讲述 MD5 加密方式. MD5 简介 MD5 消息摘要算法(英文:MD5 Message-Digest Algorithm),一种被广泛使用的密

PHP中的md5与Java中的md5加密结果不一致问题

/**     * 获取MD5加密后的字符串     * @param str 明文     * @return 加密后的字符串     * @throws Exception      */    public static String getMD5(String str) throws Exception {        /** 创建MD5加密对象 */        MessageDigest md5 = MessageDigest.getInstance("MD5");  

DES对称加解密、AES RijndaelManaged加解密、Base64加密解密、MD5加密等操作辅助类 EncodeHelper

/// <summary> /// 使用默认加密 /// </summary> /// <param name="strText"></param> /// <returns></returns> public static string DesEncrypt(string strText) /// <summary> /// 使用默认解密 /// </summary> /// <pa