golang、java和php实现32位md5加密

本文探讨了使用MD5加密算法在PHP、Java和Golang三种不同编程语言中的一致性实现。通过对比各语言的MD5加密结果,验证了无论在何种语言环境下,对于同一输入字符串,MD5加密输出均为相同的32位字符串。

php版本如下

<?php
$str = "Shanghai";
echo md5($str);
?>

java版本如下:

package com.yarm.task.common.utils;

import org.apache.commons.lang3.StringUtils;

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

public class EncodeUtils {
    /**
     * md5加密
     * @return
     */
    public String md5(String str){
        if(StringUtils.isBlank(str)) return str;

        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] bytes = md.digest(str.getBytes("utf-8"));
            return toHex(bytes);
        }
        catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

    private static String toHex(byte[] bytes) {

        final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
        StringBuilder ret = new StringBuilder(bytes.length * 2);
        for (int i=0; i<bytes.length; i++) {
            ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
            ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
        }
        return ret.toString();
    }

    /**
     * java默认
     * @param str
     * @return
     */
    public final static String md5Default(String str) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(str.getBytes());
            byte b[] = md5.digest();

            StringBuffer sb = new StringBuffer("");
            for (int n = 0; n < b.length; n++) {
                int i = b[n];
                if (i < 0) i += 256;
                if (i < 16) sb.append("0");
                sb.append(Integer.toHexString(i));
            }
            return sb.toString();  //32位加密
        } catch (NoSuchAlgorithmException e) {
            // ignore
        }
        return null;
    }

    public static void main(String[] args) {
        String secret = md5Default("Shanghai");
        System.out.println("java用md5加密32位:" + secret);
    }
}

golang用md5加密结果

1.加密方法

package go_base

import (
	"crypto/md5"
	"encoding/hex"
)

func Md5(str string) (encode string) {
	md5 := md5.New()
	md5.Write([]byte(str))
	return hex.EncodeToString(md5.Sum(nil))
}

2.main函数测试

package main

import (
	"fmt"
	go_base "go-learning/go-base"
)

func main() {

	// go_base.BaseType()

	encode := go_base.Md5("Shanghai")
	fmt.Println("golang用md5加密32位:", encode)
}

加密结果:

输入:Shanghai

输出:

golang用md5加密32位: 5466ee572bcbc75830d044e66ab429bc

java用md5加密32位:5466ee572bcbc75830d044e66ab429bc

php:5466ee572bcbc75830d044e66ab429bc

 

mysql函数:

SELECT MD5("Shanghai");

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值