`

MD5带盐值的java加密算法

    博客分类:
  • Java
 
阅读更多

import java.security.MessageDigest;

public class PasswordEncoder {
 
 private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
   "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
 
 private Object salt;
 private String algorithm;
 
 public PasswordEncoder(Object salt, String algorithm) {
  this.salt = salt;
  this.algorithm = algorithm;
 }

 public String encode(String rawPass) {
  String result = null;
  try {
   MessageDigest md = MessageDigest.getInstance(algorithm);
   //加密后的字符串  
   result = byteArrayToHexString(md.digest(mergePasswordAndSalt(rawPass).getBytes("utf-8")));
  } catch (Exception ex) {
  }
  return result;
 }
 
    public boolean isPasswordValid(String encPass, String rawPass) {
        String pass1 = "" + encPass;
        String pass2 = encode(rawPass);

        return pass1.equals(pass2);
    }
    
    private String mergePasswordAndSalt(String password) {
        if (password == null) {
            password = "";
        }

        if ((salt == null) || "".equals(salt)) {
            return password;
        } else {
            return password + "{" + salt.toString() + "}";
        }
    }

 /**
  * 转换字节数组为16进制字串
  * @param b 字节数组
  * @return 16进制字串
  */
 private static String byteArrayToHexString(byte[] b) {
  StringBuffer resultSb = new StringBuffer();
  for (int i = 0; i < b.length; i++) {
   resultSb.append(byteToHexString(b[i]));
  }
  return resultSb.toString();
 }

 private static String byteToHexString(byte b) {
  int n = b;
  if (n < 0)
   n = 256 + n;
  int d1 = n / 16;
  int d2 = n % 16;
  return hexDigits[d1] + hexDigits[d2];
 }
    
    public static void main(String[] args) {
     String salt = "helloworld";
  PasswordEncoder encoderMd5 = new PasswordEncoder(salt, "MD5");
     String encode = encoderMd5.encode("test");
     System.out.println(encode);
     boolean passwordValid = encoderMd5.isPasswordValid("1bd98ed329aebc7b2f89424b5a38926e", "test");
     System.out.println(passwordValid);

     PasswordEncoder encoderSha = new PasswordEncoder(salt, "SHA");
     String pass2 = encoderSha.encode("test");
     System.out.println(pass2);
     boolean passwordValid2 = encoderSha.isPasswordValid("1bd98ed329aebc7b2f89424b5a38926e", "test");
     System.out.println(passwordValid2);
 }

}

分享到:
评论

相关推荐

    java实现Md5加盐加密算法

    对接接口时用到的一种常用加密算法,常用于验证签名,使用shiro-all-1.4.1.jar,可自行下载

    java实现MD5加密算法

    总结,Java实现MD5加密算法主要是通过`java.security.MessageDigest`类,经过`getInstance("MD5")`获取MD5实例,然后使用`digest()`和`update()`方法处理数据,最终将二进制摘要转换为十六进制字符串。尽管MD5的安全...

    java生成md5密码加盐

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可以将任意长度的输入转化为固定长度的输出,通常用于数据校验和密码存储。...然而,考虑到MD5的安全性,现在更推荐使用如bcrypt或Argon2等现代哈希算法。

    MD5加密算法(java)

    在提供的`MD5Code.java`文件中,应该包含了上述步骤的具体实现,通过阅读和理解这段代码,你可以更深入地了解如何在Java中应用MD5加密算法。不过,实际开发中,我们通常会使用现有的安全库,如Apache Commons Codec...

    JAVA中MD5加密密码算法

    在Java编程语言中,MD5(Message-Digest Algorithm 5)是一种广泛使用的...现在更推荐使用如SHA-256或更强的加密算法。在实际应用中,通常会结合盐值(salt)和多次迭代(如bcrypt或scrypt)来提高密码存储的安全性。

    java MD5加密工具类

    下面将详细介绍Java中的MD5加密工具类及其使用方法。 MD5加密过程通常包括以下几个步骤: 1. **数据预处理**:将原始信息填充到固定长度,通常是512位的倍数。这通常通过在原始数据末尾添加0来实现,然后添加一个...

    Md5.java加密源码

    1. 引入库:Java标准库中已经包含了`java.security.MessageDigest`类,用于处理各种消息摘要算法,包括MD5。无需额外导入第三方库。 2. 创建MD5实例:首先需要创建一个`MessageDigest`实例,通过`getInstance()`...

    java MD5加密算法匹配Discuz用户表密码字段

    Java MD5加密算法在Discuz用户表密码字段中的应用 MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能将任意长度的数据转换为固定长度的输出,通常是一个128位的二进制数,常以32位的十六进制形式...

    MD5加密算法(JSP)

    以下是关于MD5加密算法及其在JSP中应用的详细知识点: 1. **MD5原理**: - MD5算法由Ronald Rivest在1991年设计,它将输入信息经过多次迭代运算后生成一个固定长度的摘要。这个摘要对输入信息极其敏感,微小的变动...

    Java十大加密算法(对称与非对称)

    以下将详细介绍标题和描述中提到的Java加密算法,并结合给定的文件名,讨论具体实现。 1. **AES(Advanced Encryption Standard)**:高级加密标准,是一种对称加密算法,因其高效性和安全性被广泛应用。AESUtil....

    MD5加密程序java代码.rar_MD5 JAVA_java md5_md5

    在`www.pudn.com.txt`和`MD5加密程序java代码.txt`这两个文件中,可能包含有关MD5加密算法更详细的解释或者Java实现的代码示例,你可以查阅这些文件以获取更多信息。总的来说,理解MD5的工作原理和正确使用Java API...

    java中使用MD5加密算法进行加密.pdf

    需要注意的是,由于MD5的碰撞问题,现在在安全领域,MD5已经不被视为安全的加密算法,更推荐使用如SHA-256或更强的哈希函数。在处理敏感信息,尤其是用户密码时,通常会结合盐值(salt)和多次迭代来提高安全性,...

    md5 MD5 加密 实例 java

    在Java中,我们可以使用`java.security.MessageDigest`类来实现MD5加密。以下是一个简单的MD5加密实例: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public ...

    JAVA版MD5加密算法

    在提供的"MD5_JAVA加密"文件中,可能包含了一个完整的Java实现MD5加密功能的类或代码片段,供开发者直接在项目中使用。这个类可能包含了上述的所有步骤,简化了MD5加密的过程,使开发者能快速集成到自己的系统中,...

    java MD5加密 实例 例子

    下面是一个简单的Java MD5加密的代码示例,对应于你提供的`TestMD5.java`文件: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class TestMD5 { public ...

    MD5 加密解密例子

    在Java EE(J2EE)环境中,MD5加密通常结合各种框架如Struts、Spring和Hibernate来实现。Struts是MVC架构的Web开发框架,Spring提供了全面的DI(依赖注入)和AOP(面向切面编程)功能,而Hibernate则是一个流行的ORM...

    MD5加密程序java的MD5加密程序

    总的来说,Java实现MD5加密是一个相对简单的过程,主要涉及到`MessageDigest`类的使用,通过调用其`getInstance()`方法获取MD5实例,然后对输入数据进行哈希处理,最后将结果转换为16进制字符串。在实际开发中,根据...

    MD5加密java和android通用

    在实际应用中,为了提高安全性,通常会将MD5值与随机盐值结合,再进行加密,这样即使两个用户使用相同的密码,加密后的结果也会不同,增加了破解的难度。 `secr`可能是提供了一个加密后的密文或者是一个包含加密...

    Java常用的对密码加密的方法(MD5,SHA)

    本篇文章将详细介绍Java中两种常见的密码加密算法:MD5(Message-Digest Algorithm 5)和SHA(Secure Hash Algorithm)。我们将通过`CodeUtil.java`这个代码文件来探讨如何在实际开发中实现这两种加密方式。 首先,...

    Java MD5 加密数据库连接池密码

    为了增强安全性,这些敏感信息往往会被加密处理,MD5(Message-Digest Algorithm 5)就是一种常用的哈希加密算法。 MD5是一种广泛使用的加密散列函数,产生一个128位(16字节)的散列值,通常用32个十六进制数字...

Global site tag (gtag.js) - Google Analytics