messagedigest创建对象(JAVA中有没有提供MD5算法的包啊) 您所在的位置:网站首页 md5计算结果不一致 messagedigest创建对象(JAVA中有没有提供MD5算法的包啊)

messagedigest创建对象(JAVA中有没有提供MD5算法的包啊)

2023-04-08 22:04| 来源: 网络整理| 查看: 265

本文目录JAVA中有没有提供MD5算法的包啊这段MD5加密算法是什么意思,谁能帮我解释下不会JAVA看不懂java md5加密 index页面代码报文摘要的概述密码 jsp代码java生成的MD5,和c#的生成的不一致,有java代码,求c#代码!php messagedigest md5 一定是16位吗各位看官看看我这个到底是什么编码的,是MD5还是Base64为什么同样的数据同样的方法调用sha-256得到的结果不同JAVA中有没有提供MD5算法的包啊

有,在java.security包的MessageDigest类。例子:import java.security.MessageDigest;public class Test2 {public static void main(String args) {Test2 t = new Test2();System.out.println(t.bytesToMD5(“a“.getBytes()));}//把字节数组转成16进位制数public String bytesToHex(byte bytes) {StringBuffer md5str = new StringBuffer();//把数组每一字节换成16进制连成md5字符串int digital;for (int i = 0; i 《 bytes.length; i++) { digital = bytes;if(digital 《 0) {digital += 256;}if(digital 《 16){md5str.append(“0“);}md5str.append(Integer.toHexString(digital));}return md5str.toString();}

//把字节数组转换成md5public String bytesToMD5(byte input) {String md5str = null;try {//创建一个提供信息摘要算法的对象,初始化为md5算法对象MessageDigest md = MessageDigest.getInstance(“MD5“);//计算后获得字节数组byte buff = md.digest(input);//把数组每一字节换成16进制连成md5字符串md5str = bytesToHex(buff);} catch (Exception e) {e.printStackTrace();}return md5str;}}

这段MD5加密算法是什么意思,谁能帮我解释下不会JAVA看不懂

public static byte getMD5(File file) {FileInputStream fis = null;//定义文件字节流try {MessageDigest md = MessageDigest.getInstance(“MD5“);//创建MD5加密使用的对象fis = new FileInputStream(file);//读取需要加密的文件,并封装如流对象里面byte;//创建字节数据,用于将文件中的字符转换成字节int length = -1;//fis.read--从此输入流中将最多 buffer.length 个字节的数据读入一个 byte 数组中//如果长度为-1说明已经读到最后则跳出循环while ((length = fis.read(buffer)) != -1) {//使用指定的 byte 数组,从头开始按照MD5进行编码md.update(buffer, 0, length);}byte b = md.digest();//该方法的调用表示完成的编码计算

return b;} catch (Exception ex) {ex.printStackTrace();return null;} finally {try {fis.close();} catch (IOException ex) {ex.printStackTrace();}}}}大体上就是这么个意思

java md5加密 index页面代码

/**      * 将指定byte数组转换成16进制字符串      * @param b      * @return      */     public static String byteToHexString(byte b) {        StringBuffer hexString = new StringBuffer();        for (int i = 0; i 《 b.length; i++) {            String hex = Integer.toHexString(b & 0xFF);            if (hex.length() == 1) {                hex = ’0’ + hex;            }            hexString.append(hex.toUpperCase());        }        return hexString.toString();    } /**      * 获得加密后的16进制形式口令      * @param password      * @return      * @throws NoSuchAlgorithmException      * @throws UnsupportedEncodingException      */     public static String getEncryptedPwd(String password)            throws NoSuchAlgorithmException, UnsupportedEncodingException {        //声明加密后的口令数组变量           byte pwd = null;        //随机数生成器           SecureRandom random = new SecureRandom();        //声明盐数组变量           byte;        //将随机数放入盐变量中           random.nextBytes(salt);        //声明消息摘要对象           MessageDigest md = null;        //创建消息摘要           md = MessageDigest.getInstance(“MD5“);        //将盐数据传入消息摘要对象           md.update(salt);        //将口令的数据传给消息摘要对象           md.update(password.getBytes(“UTF-8“));        //获得消息摘要的字节数组           byte digest = md.digest();        //因为要在口令的字节数组中存放盐,所以加上盐的字节长度           pwd = new byte;        //将盐的字节拷贝到生成的加密口令字节数组的前12个字节,以便在验证口令时取出盐           System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH);        //将消息摘要拷贝到加密口令字节数组从第13个字节开始的字节           System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length);        //将字节数组格式加密后的口令转化为16进制字符串格式的口令           return byteToHexString(pwd);    }public static void main(String args) {//测试方法    try {            System.out.println(getEncryptedPwd(“123456“));     } catch (NoSuchAlgorithmException e) {             // TODO Auto-generated catch block             e.printStackTrace();    } catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

在jsp页面中可以调用getEncryptedPwd 方法

报文摘要的概述

MessageDigest类为应用程序提供信息摘要算法的功能,如MD5 或SHA算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。MessageDigest对象开始被初始化。该对象通过使用update方法处理数据。任何时候都可以调用reset方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用digest方法之一完成哈希计算。对于给定数量的更新数据,digest方法只能被调用一次。digest被调用后,MessageDigest对象被重新设置成其初始状态。

密码 jsp代码

public class Reg { /** * @param args */ public static void main(String args) { String aaString=“haquanwen12“; //密码复杂度校验判读是否有数字和字母组成 if (getInvalue(aaString)) { System.out.println(“密码有数字字母做成“); }else { System.out.println(“密码中不包括数字和字母“); } //普通加密 System.out.println(“普通加密前的密码为:“+aaString); String ecoString=encodePwd(aaString); System.out.println(“普通加密后的密码为:“+ecoString); System.out.println(“普通再次加密:“+encodePwd(ecoString)); //MD5加密 System.out.println(“MD5加密后的值为“+encrypt(aaString)); } //密码加密函数,这个方法具有逆向性,及加密算法和解密算法相同的 public static String encodePwd(String pwd){ String encodeString=“^&*^&687GIKUGUGBjhkjbhjk“; String reString=““; if(pwd==null){ pwd=““; } for(int i=0;i《pwd.length();i++){ reString=reString+(char)(pwd.charAt(i)^encodeString.charAt(i));

} return reString;

}

//MD5加密 public static byte encrypt(String msg) { try { //生成MessageDigest对象 MessageDigest md5=MessageDigest.getInstance(“MD5“); byte srcBytes=msg.getBytes(); //更新摘要 md5.update(srcBytes); //完成hash计算。得到result byte resulBytes=md5.digest(); return resulBytes; } catch (NoSuchAlgorithmException e) { // TODO: handle exception e.printStackTrace(); } return null;

} //密码复杂度校验 /* */ public static boolean getInvalue(String pw){ for(int i=0;i《pw.length();i++){ if(Character.isDigit(pw.charAt(i))&&Pattern.compile(“(?i)“).matcher(pw).find()){ return true; } } return false; }}

java生成的MD5,和c#的生成的不一致,有java代码,求c#代码!

考虑一下中文字符问题。两边使用的编码是不是一样的。保持一样就可以了。

建议使用UTF8编码

JAVA代码如下(在你给同的代码上只做了少量修改):

public class Security {public static void main(String args) {try {System.out.println(MD5(“中国“));} catch(Exception ex) {}}public static String MD5(String txt) {char hexDigits = { ’0’, ’1’, ’2’, ’3’, ’4’, ’5’, ’6’, ’7’, ’8’, ’9’,’a’, ’b’, ’c’, ’d’, ’e’, ’f’ };try {byte btInput = txt.getBytes(“utf-8“);MessageDigest mdInst = MessageDigest.getInstance(“MD5“);// 使用指定的字节更新摘要mdInst.update(btInput);// 获得密文byte md = mdInst.digest();// 把密文转换成十六进制的字符串形式int j = md.length;char str;int k = 0;for (int i = 0; i 《 j; i++) {byte byte0 = md;str;str;}return new String(str);} catch (Exception e) {e.printStackTrace();return null;}}}

C#代码如下:

static void Main(string args)        {            Console.WriteLine(Md5(“中国“));            Console.ReadLine();        }        static string Md5(string txt) {            byte result = Encoding.UTF8.GetBytes(txt);               MD5 md5 = new MD5CryptoServiceProvider();            byte output = md5.ComputeHash(result);            return BitConverter.ToString(output).Replace(“-“, ““);          }

php messagedigest md5 一定是16位吗

public final class MD5 {

/** * 获取MD5加密后的字符串 * @param str 明文 * @return 加密后的字符串 * @throws Exception */ public static String getMD5(String str) throws Exception { /** 创建MD5加密对象 */ MessageDigest md5 = MessageDigest.getInstance(“MD5“); /** 进行加密 */ md5.update(str.getBytes()); /** 获取加密后的字节数组 */ byte md5Bytes = md5.digest(); String res = ““; for (int i = 0; i 《 md5Bytes.length; i++){ int temp = md5Bytes & 0xFF; if (temp 《= 0XF){ // 转化成十六进制不够两位,前面加零 res += “0“; } res += Integer.toHexString(temp); } return res; }}

//这是我写的32位MD5加密(原本是16位)

各位看官看看我这个到底是什么编码的,是MD5还是Base64

这个是先使用md5算法,计算st字符串的md5值,然后用BASE64算法计算md5值的BASE64值MessageDigest md=MessageDigest.getInstance(“MD5“); //指定以MD5算法创建摘要对象byte a=md.digest(st.getBytes()); //计算st字符串的摘要数组BASE64Encoder ba=new BASE64Encoder(); //创建BASE64编码器String b=ba.encode(a); //对st的摘要数组用base64编码器编码并返回字符串return b; //返回最后编码结果

为什么同样的数据同样的方法调用sha-256得到的结果不同

Java 已经实现了 SHA-256 和 SHA-512 两种 Hash 算法利用 java.security.MessageDigest 调用已经集成的 Hash 算法创建 Encrypt 对象,并调用 SHA256 或者 SHA512 并传入要加密的文本信息,分别得到 SHA-256 或 SHA-512 两种被加密的 hash 串。若要改为 MD5 算法,修改传入参数 strType 为 “MD5“ 即可得到 MD5 加密功能。 view plain copypackage test;

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

public class Encrypt {

/** * 传入文本内容,返回 SHA-256 串 *



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有